微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在PyQt5 Python中更改表格小部件中滚动条的颜色

如何解决如何在PyQt5 Python中更改表格小部件中滚动条的颜色

我正在设计一个UI,其中有一个df$`Column Name`<- iconv(df$`Column Name`,to = "UTF-8"),用于显示一些数据。如下图所示:

enter image description here

截至目前,表格小部件的滚动条采用小部件的背景色,因此一见钟情。是否可以更改其颜色以使其更可见。谢谢

解决方法

如何完全绘制滚动条取决于QStyle。

一种可能是使用正确的ColorRole来设置滚动条的调色板,但是不幸的是,并非所有样式都以相同的方式绘制小部件。有些使用QPalette.Button角色,有些则完全忽略小部件选项板。

虽然可以使用QProxyStyle,但是某些样式也忽略了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,widget)

# ...

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

请注意,这将设置整个应用程序的样式。如果只想对单个tablewidget使用此行为,则需要分别为两个滚动条设置样式(因为样式不会传播到子级)。

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)会导致代理 overriding 构造函数中的样式(因此,无论如何,您最终都会用代理样式绘制所有滚动条)。使用self.style().objectName()可以确保创建新样式,并且该样式将仅用于代理,因此也将应用于所应用的小部件。

最后,如果您需要提供跨平台(和跨样式)兼容性,则唯一可能的解决方案是使用样式表,为此您应阅读customizing QScrollBar。请注意,在滚动条上设置样式表时,不能为单个控件设置属性(仅用于按钮或手柄):您必须为每个控件提供样式表,否则滚动条将不会正确绘制,可能会变得无法使用。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。