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()