试图找出如何在QWidget中设置背景颜色。这是我的代码:
class ParentTester(QWidget):
def __init__(self, parent=None):
super().__init__(parent)
left = ColorTester(self)
right = QFrame(self)
right.setFrameStyle(QFrame.Panel | QFrame.Sunken)
layout = QHBoxLayout()
layout.addWidget(left)
layout.addWidget(right)
self.setLayout(layout)
class ColorTester(QWidget):
def __init__(self, parent=None):
super().__init__(parent)
palette = self.palette()
palette.setColor(QPalette.Window, QColor(128, 0, 0))
self.setPalette(palette)
def main():
import sys
from PySide2.QtWidgets import QApplication
app = QApplication([])
works = True
if works:
win = ColorTester()
else:
win = ParentTester()
win.show()
win.resize(640, 480)
sys.exit(app.exec_())
if __name__ == '__main__':
main()
如果我将类创建为最顶层的窗口,则此方法有效。但是,如果我将其作为其他控件的子级,则背景色会恢复为默认值。其他一些颜色角色确实会生效,但背景颜色不会生效。不仅如此,颜色还会传递给子控件。
如何更改控件的背景颜色,而不更改其子控件?
答案 0 :(得分:2)
默认情况下,子窗口小部件采用窗口的颜色,因此您会观察到这种效果,如果要使用自定义背景色,则必须启用autoFillBackground
属性:
class ColorTester(QWidget):
def __init__(self, parent=None):
super().__init__(parent)
palette = self.palette()
palette.setColor(QPalette.Window, QColor(128, 0, 0))
self.setPalette(palette)
self.setAutoFillBackground(True)
答案 1 :(得分:0)
我最终决定为我的窗口小部件覆盖paintEvent。在调色板中设置颜色似乎总是将颜色传递给子控件,这不是我想要的。这是对我有用的示例。这是一个QFrame,它采用默认的背景颜色,并对其进行暗化和绿色偏移。
/Users/sandeepan.nath/.m2/repository/org/apache/tomcat/embed/tomcat-embed-jasper