簡體   English   中英

PyQt5 Python 表格小部件滾動條顏色更改方法

[英]How to change the color of scroll bar in table widget in PyQt5 Python

我正在設計 UI,其中我有一個table widget ,我在其中顯示一些數據。 它看起來像下面這樣:

在此處輸入圖像描述

截至目前,表格小部件的滾動條采用小部件的背景顏色,因此乍一看不可見。 是否可以更改其顏色以使其更明顯。 謝謝

滾動條如何繪制完全取決於QStyle。

一種可能是使用正確的ColorRole為滾動條設置調色板,但不幸的是,並非所有 styles 都以相同的方式繪制小部件。 有些使用QPalette.Button角色,有些則完全忽略小部件調色板。

雖然可以使用 QProxyStyle,但一些 styles 也會忽略CE_ScrollBarSlider控件,因為它們完全自己繪制整個滾動條。

但是,對於默認的“windows”樣式,代理樣式通常有效:

class ProxyStyle(QtWidgets.QProxyStyle):
    def drawControl(self, ctl, opt, qp, widget=None):
        if ctl == self.CE_ScrollBarSlider:
            opt = opt.__class__(opt)
            opt.palette.setColor(opt.palette.Button, QtCore.Qt.green)
        super().drawControl(ctl, opt, qp, widget)

# ...

app = QtWidgets.QApplication(sys.argv)
app.setStyle(ProxyStyle(app.style()))

請注意,這將為整個應用程序設置樣式。 如果您只想對單個 tablewidget 使用此行為,則需要分別為兩個滾動條設置樣式(因為 styles 不會傳播到子項)。

class TableWidget(QtWidgets.QTableWidget):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        style = ProxyStyle(self.style().objectName())
        self.horizontalScrollBar().setStyle(style)
        self.verticalScrollBar().setStyle(style)

如您所見,在上面的示例中,我使用了不同的構造函數。 這是因為使用ProxyStyle(QStyle)會導致代理覆蓋構造函數中的樣式(因此您最終會以代理樣式繪制所有滾動條)。 使用self.style().objectName()確保將創建一個新樣式,並且該樣式將僅用於代理,因此用於應用它的小部件。

最后,如果您需要提供跨平台(和跨樣式)兼容性,唯一可能的解決方案是使用樣式表,對此您應該閱讀customizing QScrollBar 請注意,在滾動條上設置樣式表時,您不能為單個控件設置屬性(例如僅為按鈕或手柄設置屬性):您必須為每個控件提供樣式表,否則滾動條將無法正確繪制並且可能變得無法使用.

暫無
暫無

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

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