我无法获得小部件的实际背景颜色。 在我的特殊情况下,我在QTabWidget中遇到小部件问题。
这是在Windows7上。 因此,经典小部件具有一些灰色背景,而选项卡中的小部件通常以白色背景绘制。
我试过了:
def bgcolor(widget):
color = widget.palette().color(widget.backgroundRole()) # version 1
color = widget.palette().color(QtGui.QPalette.Background) # version 2
rgba = color.red(), color.green(), color.blue(), color.alpha()
return rgba
这几乎是我可以从Qt文档中找出自己以及google和SO给出的内容。 但是,这只是行不通。
我正在测试TabWidget内部和外部的小部件,上面的函数为明显不同颜色的小部件返回相同的颜色。 即它总是返回灰色,即使是标签内的纯白色小部件也是如此。
我在这里错过了什么吗?
编辑:
我的问题是当使用matplotlib时,matplotlib在嵌入QTabWidget中时会使用错误的背景颜色绘制带有“无”facecolor的数字:灰色,即使父窗口小部件是白色的。
为了解决这个问题,我想获得小部件的背景颜色,并将其设置为图形的背景颜色。 虽然这可能是一个matplotlib问题,但我猜这将是最快的解决方法。 当我注意到我无法获得正确的颜色时,我变得坚持:)
答案 0 :(得分:2)
调色板返回正确的颜色。
您可能犯的错误是您正在假设"背景"对所有小部件来说,总是意味着同样的事情。我们以未经修改的QListWidget
为例。在具有传统浅色方案的桌面上,这可能在3D凹陷面板中显示为白色视口。但是如果你查询"背景"对于这个小部件,你会看到这样的东西:
>>> widget = QtGui.QListWidget()
>>> widget.palette().color(QtGui.QPalette.Background).name()
'#edecec'
显然不是白色的。因此Background
是查询此窗口小部件的错误颜色角色。相反,看起来Base
可能更合适:
>>> widget.palette().color(QtGui.QPalette.Base).name()
'#ffffff'
值得注意的是,documentation for color roles表示Background
和Foreground
是过时的价值,而建议使用Window
和WindowText
。也许这是因为以前的术语现在被认为是误导性的。
<强>更新强>:
在使用基于像素图的样式的平台上,某些报告的调色板颜色与小部件的视觉外观不匹配。此问题特别影响Windows和OSX,因此可以解释为什么您无法获得选项卡的明显背景颜色。此问题记录在Qt FAQ中,它也提供了一些可能的解决方案(尽管QProxyStyle
选项是禁止的,因为PyQt不支持它。)