css class 和 setProperty() 无法更改 QWidget 的背景颜色
Changing background color of a QWidget is not possible with a css class and setProperty()
在 QWidget 的子类中:
class MainWidget(QtGui.QWidget):
def __init__(self, *args):
QtGui.QWidget.__init__(self, *args)
...
self.setStyleSheet(stylesheet)
与此 css 配合得很好:
QWidget {
background-color: black;
}
但添加这个:
self.setStyleSheet(stylesheet)
self.setProperty('class', 'main')
并将 css 更改为:
QWidget.main {
background-color: black;
}
完全没有效果。我错过了什么? setProperty 在其他对象上的作用就像一个魅力。
如果您从 QWidget 子class 自定义小部件,那么为了使用样式表,您需要为自定义小部件提供一个 paintEvent。参见 this page。
因此将以下方法添加到您的 MainWidget
class:
def paintEvent(self, event):
"Reimplementation of paintEvent to allow for style sheets"
opt = QtGui.QStyleOption()
opt.initFrom(self)
painter = QtGui.QPainter(self)
self.style().drawPrimitive(QtGui.QStyle.PE_Widget, opt, painter, self)
painter.end()
在 QWidget 的子类中:
class MainWidget(QtGui.QWidget):
def __init__(self, *args):
QtGui.QWidget.__init__(self, *args)
...
self.setStyleSheet(stylesheet)
与此 css 配合得很好:
QWidget {
background-color: black;
}
但添加这个:
self.setStyleSheet(stylesheet)
self.setProperty('class', 'main')
并将 css 更改为:
QWidget.main {
background-color: black;
}
完全没有效果。我错过了什么? setProperty 在其他对象上的作用就像一个魅力。
如果您从 QWidget 子class 自定义小部件,那么为了使用样式表,您需要为自定义小部件提供一个 paintEvent。参见 this page。
因此将以下方法添加到您的 MainWidget
class:
def paintEvent(self, event):
"Reimplementation of paintEvent to allow for style sheets"
opt = QtGui.QStyleOption()
opt.initFrom(self)
painter = QtGui.QPainter(self)
self.style().drawPrimitive(QtGui.QStyle.PE_Widget, opt, painter, self)
painter.end()