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

标签 python qt pyside2

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


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

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

最佳答案

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

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)

enter image description here

关于python - pyside2中的自定义小部件背景颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62239861/

相关文章:

windows - 如何在 Windows 上使用 Qt 获取开放端口的进程名称和二进制路径?

python - 将小部件添加到从 .ui 文件创建的布局中

python - PySide2 Qt3D 网格不显示

python - 关闭 matplotlib 中所有绘图的刻度(使用 rc)

连接到 Qt 信号的 Python lambda 函数在不同线程中创建时不会运行

python - 使用 OpenCV 或 Matplotlib/Pyplot 可视化 MNIST 数据集

c++ - 如何从 QML 设置模型数据?

java - 在 jython udp 数据包中发送原始十六进制数据

C++ 在 { Token 之前无效使用不完整类型或预期初始化程序

python - 类型错误 : A constant property cannot have a WRITE method or a NOTIFY signal