如何使用PySide中的样式表为整个小部件设置背景颜色

4

我想要设置一个小部件的背景颜色,但是它只适用于小部件的子元素。下面的代码是真实应用程序结构的简单表示。我希望testWidget完全变成红色,因为它的大小是100x100像素的矩形,但出于某种原因,只有按钮是红色的。

from PySide import QtGui


class Widget(QtGui.QWidget):
def __init__(self):
    QtGui.QWidget.__init__(self)

    mainLayout = QtGui.QVBoxLayout(self)

    testWidget = QtGui.QWidget()
    testWidget.setFixedSize(100,100)

    testWidget.setStyleSheet('background-color: red;')
    testLayout = QtGui.QVBoxLayout()

    testWidget.setLayout(testLayout)


    but = QtGui.QPushButton('TEST')
    but.setFixedSize(20,20)
    testLayout.addWidget(but)

    mainLayout.addWidget(testWidget)

w = Widget()
w.show()
1个回答

8
默认情况下,QWidget 不会填充其背景。您可以使用 QFrame 替代,或将 QWidgetWA_StyledBackground 属性设置为 True。详见:PySide: QWidget does not draw background color
要仅将样式表应用于容器而不是其子项,可以命名容器小部件,并通过引用其名称来专门应用样式表。
下面是一个最小化工作示例,源自您的代码,展示了如何使用 QFrame 而不是 QWidget 来实现:
from PySide import QtGui
import sys


class Widget(QtGui.QWidget):
    def __init__(self):
        QtGui.QWidget.__init__(self)

        mainLayout = QtGui.QVBoxLayout(self)

        testWidget = QtGui.QFrame()
        testWidget.setFixedSize(100,100)
        testWidget.setObjectName("myWidget")
        testWidget.setStyleSheet("#myWidget {background-color:red;}") 

        testLayout = QtGui.QVBoxLayout()

        testWidget.setLayout(testLayout)

        but = QtGui.QPushButton('TEST')
        testLayout.addWidget(but)

        mainLayout.addWidget(testWidget)


if __name__ == '__main__':

    app = QtGui.QApplication(sys.argv)
    instance_1 = Widget()
    instance_1.show()
    sys.exit(app.exec_())

这导致了以下结果:

在此输入图片描述


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接