如何设置QWidget的背景颜色?

30

以下代码中的行w.setBackgroundRole(QPalette.Base)没有效果。为什么?我该如何修复它?

import sys
from PySide.QtCore import *
from PySide.QtGui import *

app = QApplication(sys.argv)
w = QWidget()
w.setBackgroundRole(QPalette.Base)
w.show()
app.exec_()
2个回答

69
你需要在小部件上调用setAutoFillBackground(True)方法。默认情况下,QWidget不会填充其背景。
有关更多信息,请参阅setAutoFillBackground属性的文档。
如果你想使用任意背景颜色,就需要修改小部件的调色板:
p = w.palette()
p.setColor(w.backgroundRole(), Qt.red)
w.setPalette(p)

5
欢迎来到stackoverflow!感谢您回答了“为什么”和“如何”两个问题! - Johan Råde
4
没问题。我需要补充一点,Qt文档有些不太清晰:如果一个小部件是顶层窗口,那么QPalette::Window角色就被用来填充它的背景。否则,会使用你的小部件的backgroundRole代替QPalette::Window,所以你的代码应该按预期工作。 - jmk
所以它是self.widget.setAutoFillBackground(True)。 - pippo1980
嗨,对我来说这没有任何效果,而@Mohammad Nazari下面的答案有效。你有什么想法是什么原因呢? - undefined

9

您也可以使用 setStyleSheet,例如:

w.setAttribute(Qt.Qt.WA_StyledBackground, True)
w.setStyleSheet('background-color: red;')

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