簡體   English   中英

pyside2中的自定義小部件背景顏色

[英]Custom widget background color in 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()

如果我將 class 創建為最頂層的 window,則此方法有效。 但是,如果我使它成為另一個控件的子控件,則背景顏色將恢復為默認值。 其他一些顏色角色確實生效,但不是背景顏色。 不僅如此,colors 還可以傳遞給子控件。

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

默認情況下,子小部件采用 window 的顏色,因此您可以觀察到這種效果,如果要使用自定義背景顏色,則必須啟用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)

在此處輸入圖像描述

我最終決定為我的小部件覆蓋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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM