seb*_*ian 3 python qt pyqt matplotlib
我无法获取小部件的实际背景颜色。在我的特殊情况下,我在使用 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
Run Code Online (Sandbox Code Playgroud)
这几乎是我可以从 Qt 文档以及 google 和 SO 提供的内容中找出的内容。但是,这根本行不通。
我正在测试 TabWidget 内部和外部的小部件,上面的函数为明显不同颜色的小部件返回相同的颜色。也就是说,它总是返回灰色,即使对于选项卡中的纯白色小部件也是如此。
我在这里错过了什么吗?
编辑:
我的问题是,当使用 matplotlib 时,当嵌入到 QTabWidget 中时,matplotlib 会绘制带有“无”面部颜色的图形,并且背景颜色错误:灰色,即使父窗口小部件是白色的。
为了解决这个问题,我想获取小部件的背景颜色并将其设置为图形的背景颜色。虽然这可能是 matplotlib 问题,但我猜这将是最快的解决方法。当我发现我无法获得正确的颜色时,我变得坚持:)
调色板正在返回正确的颜色。
您可能犯的错误是您假设“背景”对于所有小部件始终意味着相同的事情。我们以未修改的QListWidget
为例。在采用传统浅色方案的桌面上,这可能会显示为 3D 凹陷面板内的白色视口。但是,如果您查询此小部件的“背景”,您将看到如下内容:
>>> widget = QtGui.QListWidget()
>>> widget.palette().color(QtGui.QPalette.Background).name()
'#edecec'
Run Code Online (Sandbox Code Playgroud)
这显然不是白色的。Background
查询此小部件的颜色角色也是错误的。相反,它看起来Base
可能更合适:
>>> widget.palette().color(QtGui.QPalette.Base).name()
'#ffffff'
Run Code Online (Sandbox Code Playgroud)
值得注意的是,颜色角色的文档指出Background
和Foreground
是过时的值,建议使用Window
和来代替。WindowText
也许这是因为以前的术语现在被认为具有误导性。
更新:
在使用基于像素图的样式的平台上,某些报告的调色板颜色将与小部件的视觉外观不匹配。此问题特别影响 Windows 和 OSX,因此可以解释为什么您无法获取选项卡的明显背景颜色。这个问题记录在Qt FAQ中,其中也提供了一些可能的解决方案(尽管QProxyStyle
PyQt5 支持该选项,但 PyQt4 不支持)。