如何在 PySide 中使用样式表为整个小部件设置背景颜色
How to set background color to entire widget with stylesheet in PySide
我正在尝试设置小部件的背景颜色,但它仅适用于小部件的子项。下面的代码是真实应用程序结构的简单表示。我希望 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()
默认情况下,QWidget
不会填充其背景。您可以改用 QFrame
或将 QWidget
的 WA_StyledBackground
属性设置为 True,如此处所述:PySide: QWidget does not draw background color.
要将样式 sheet 仅应用于容器,而不应用于其子容器,可以命名容器小部件,并且可以通过引用其名称来具体将样式 sheet 应用于它.
下面是一个 MWE,派生自您的代码,展示了如何使用 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_())
这导致:
我正在尝试设置小部件的背景颜色,但它仅适用于小部件的子项。下面的代码是真实应用程序结构的简单表示。我希望 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()
默认情况下,QWidget
不会填充其背景。您可以改用 QFrame
或将 QWidget
的 WA_StyledBackground
属性设置为 True,如此处所述:PySide: QWidget does not draw background color.
要将样式 sheet 仅应用于容器,而不应用于其子容器,可以命名容器小部件,并且可以通过引用其名称来具体将样式 sheet 应用于它.
下面是一个 MWE,派生自您的代码,展示了如何使用 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_())
这导致: