pyside2中的自定义小部件背景颜色

问题描述 投票:1回答:2

试图找出如何在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()

如果我将类创建为最顶层的窗口,则此方法有效。但是,如果将其设为其他控件的子级,则背景色会恢复为默认值。其他一些颜色角色确实会生效,但背景颜色不会生效。不仅如此,颜色还会传递给子控件。

如何更改控件的背景颜色而不更改其子控件?

python qt pyside2
2个回答
1
投票

默认情况下,子窗口小部件采用窗口的颜色,因此您会观察到这种效果,如果要使用自定义背景色,则必须启用autoFillBackground属性:

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)


0
投票

我终于决定为我的小部件重写paintEvent。在调色板中设置颜色似乎总是将颜色传递给子控件,这不是我想要的。这是对我有用的示例。这是一个QFrame,它采用默认的背景颜色,并对其进行暗化和绿色偏移。

enter image description here
© www.soinside.com 2019 - 2024. All rights reserved.