[英]How to change the color of scroll bar in table widget in PyQt5 Python
滾動條如何繪制完全取決於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.