如何解决如何在PyQt5 Python中更改表格小部件中滚动条的颜色
我正在设计一个UI,其中有一个df$`Column Name`<- iconv(df$`Column Name`,to = "UTF-8")
,用于显示一些数据。如下图所示:
截至目前,表格小部件的滚动条采用小部件的背景色,因此一见钟情。是否可以更改其颜色以使其更可见。谢谢
解决方法
如何完全绘制滚动条取决于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 举报,一经查实,本站将立刻删除。