如何使用样式表设置 qwidget 的背景颜色?
Posted
技术标签:
【中文标题】如何使用样式表设置 qwidget 的背景颜色?【英文标题】:how to set the background color of a qwidget using stylesheets? 【发布时间】:2019-06-21 17:58:54 【问题描述】:关于 Qt 样式表,我似乎不太了解。我只想将小部件的背景颜色设置为白色。但由于某种原因,背景颜色实际上只出现在我的小部件的孩子中。
我尝试将self.setAutoFillBackground(True)
添加到我的代码中,但没有成功。
我还尝试从https://wiki.qt.io/How_to_Change_the_Background_Color_of_QWidget 调色解决方案。它有效,但前提是我不设置底部边框所需的样式表。
class TopLabelNewProject(qt.QWidget):
def __init__(self, parent=None):
super().__init__(parent)
layout = qt.QHBoxLayout(self)
layout.setContentsMargins(40, 0, 32, 0)
self.setLayout(layout)
self.setFixedHeight(80)
self.setStyleSheet("""
background-color: white;
border-bottom: 1px solid %s;
""" % colors.gray)
self.label = qt.QLabel("Dashboard")
self.label.setStyleSheet("""
QLabel
font: medium Ubuntu;
font-size: 20px;
color: %s;
""" % colors.gray_dark)
layout.addWidget(self.label, alignment=qt.Qt.AlignLeft)
self.newProjectButton = Buttons.DefaultButton("New project", self)
layout.addWidget(self.newProjectButton, alignment=qt.Qt.AlignRight)
注意:Buttons.DefaultButton 只是一个带有自定义样式表的 QPushButton。
这就是我想要实现的,带有标签和按钮的白色标题栏:
但只有标签有白色背景。
【问题讨论】:
我找到了解决方案:self.setAttribute(qt.Qt.WA_StyledBackground, True)
但我不明白为什么需要这样做。在样式表中设置背景颜色非常明确地表明我确实想要“使用样式背景”
QWidget does not draw background color的可能重复
【参考方案1】:
试试看:
import sys
from PyQt5 import Qt as qt
class TopLabelNewProject(qt.QWidget):
def __init__(self, parent=None):
super().__init__(parent)
layout = qt.QHBoxLayout(self)
layout.setContentsMargins(40, 0, 32, 0)
self.setLayout(layout)
self.setFixedHeight(80)
self.label = qt.QLabel("Dashboard")
layout.addWidget(self.label, alignment=qt.Qt.AlignLeft)
# self.newProjectButton = Buttons.DefaultButton("New project", self)
self.newProjectButton = qt.QPushButton("New project", self)
layout.addWidget(self.newProjectButton, alignment=qt.Qt.AlignRight)
style = '''
QWidget
background-color: white;
QLabel
font: medium Ubuntu;
font-size: 20px;
color: #006325;
QPushButton
background-color: #006325;
color: white;
min-width: 70px;
max-width: 70px;
min-height: 70px;
max-height: 70px;
border-radius: 35px;
border-width: 1px;
border-color: #ae32a0;
border-style: solid;
QPushButton:hover
background-color: #328930;
QPushButton:pressed
background-color: #80c342;
'''
if __name__ == '__main__':
app = qt.QApplication(sys.argv)
app.setStyleSheet(style)
ex = TopLabelNewProject()
ex.show()
sys.exit(app.exec_())
【讨论】:
这行得通,谢谢。显然,如果我不希望我的应用程序中的所有其他QWidgets
也有白色背景并且我的所有按钮都是绿色和圆形的,我需要更具体地使用我的类型选择器。
但是当我在应用程序而不是小部件上设置样式表时看到不同的结果,这使得样式表机制对我来说更加模糊。
见***.com/questions/52637147/…【参考方案2】:
首先(仅更改一个小部件):右键单击小部件,单击“更改样式表”并打开样式表窗口,当您在窗口内移动某些内容时,小部件也会发生变化。 第二(更改所有选定的小部件):使用属性窗口,标记您要更改的所有小部件,单击styleSheetrow的...。当您现在更改时,样式表窗口会打开,您选择的所有小部件都会更改。
插入样式表:
QLabel
......
背景颜色:黑色;
一个完整的例子:
QLabel
border-style: outset;
border-width: 2px;
border-color: black;
Background-color: rgb(255,247,191);
color: black;
有关 Sylesheet 窗口的更多信息,请阅读 https://doc.qt.io/Qt-5/stylesheet-syntax.html
友好的祝福嗅探
【讨论】:
以上是关于如何使用样式表设置 qwidget 的背景颜色?的主要内容,如果未能解决你的问题,请参考以下文章