Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python pyside2中的自定义小部件背景色_Python_Qt_Pyside2 - Fatal编程技术网

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

Python pyside2中的自定义小部件背景色,python,qt,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)

正在尝试解决如何在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()

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


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

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

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)
class ColorTester(QWidget):
def uuu init uuu(self,parent=None):
super()。\uuuu init\uuuu(父级)
palete=self.palete()
调色板.setColor(qpalete.Window,QColor(128,0,0))
self.setPalette(调色板)
self.setAutoFillBackground(True)

我最终决定为我的小部件覆盖paintEvent。在调色板中设置颜色似乎总是将颜色传递给子控件,这不是我想要的。这是一个对我有用的例子。这是一个QFrame,它采用默认背景色,稍微变暗和变绿

class GreenFrame(QFrame):
    def __init__(self, parent=None):
        super().__init__(parent)
        r, g, b, a = self.palette().color(QPalette.Window).toTuple()
        self._bgcolor = QColor(r * 7 // 8, g, b * 7 // 8)

    def paintEvent(self, event):
        painter = QPainter(self)
        painter.fillRect(event.rect(), self._bgcolor)
        super().paintEvent(event)