如何设置QWidget背景颜色?

Joh*_*åde 16 python pyqt pyside

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_()
Run Code Online (Sandbox Code Playgroud)

jmk*_*jmk 47

你需要调用setAutoFillBackground(True)小部件.默认情况下,a QWidget不会填充其背景.

有关更多信息,请参阅该setAutoFillBackground属性的文档.

如果要使用任意背景颜色,则需要修改小部件的调色板:

p = w.palette()
p.setColor(w.backgroundRole(), Qt.red)
w.setPalette(p)
Run Code Online (Sandbox Code Playgroud)

  • 欢迎来到stackoverflow!感谢您回答"为什么"和"如何"! (4认同)
  • 没问题.我应该补充一点,Qt文档有点不清楚:如果它是顶级窗口,`QPalette :: Window`角色用于填充小部件的背景.否则,将使用您的窗口小部件的`backgroundRole`,因此您的代码应该按预期工作. (4认同)

Moh*_*ari 9

您还可以使用setStyleSheet例如:

w.setAttribute(Qt.Qt.WA_StyledBackground, True)
w.setStyleSheet('background-color: red;')
Run Code Online (Sandbox Code Playgroud)