我无法获取小部件的实际背景颜色。
在我的特殊情况下,我在使用 QTabWidget 中的小部件时遇到问题。
这是在Windows7上。
因此,经典的小部件有一些灰色背景,而选项卡内的小部件通常用白色背景绘制。
I tried:
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 内部和外部的小部件,上面的函数为明显不同颜色的小部件返回相同的颜色。
也就是说,它总是返回灰色,即使对于选项卡中的纯白色小部件也是如此。
我在这里错过了什么吗?
EDIT:
我的问题是,当使用 matplotlib 时,当嵌入到 QTabWidget 中时,matplotlib 会绘制带有“无”面部颜色的图形,并且背景颜色错误:灰色,即使父窗口小部件是白色的。
为了解决这个问题,我想获取小部件的背景颜色并将其设置为图形的背景颜色。
虽然这可能是 matplotlib 问题,但我猜这将是最快的解决方法。
当我发现我无法获得正确的颜色时,我变得坚持:)
调色板返回正确的颜色。
您可能犯的错误是您假设“背景”对于所有小部件始终意味着相同的事情。我们拿一个未修改的QListWidget
举个例子。在采用传统浅色方案的桌面上,这可能会显示为 3D 凹陷面板内的白色视口。但是,如果您查询此小部件的“背景”,您将看到如下内容:
>>> widget = QtGui.QListWidget()
>>> widget.palette().color(QtGui.QPalette.Background).name()
'#edecec'
这显然不是白色的。所以Background
查询此小部件的颜色角色是错误的。相反,它看起来像Base
可能更合适:
>>> widget.palette().color(QtGui.QPalette.Base).name()
'#ffffff'
值得注意的是,颜色角色的文档 http://qt-project.org/doc/qt-4.8/qpalette.html#ColorRole-enum指出Background
and Foreground
是过时的值,其中Window
and WindowText
而是被推荐。也许这是因为以前的术语现在被认为具有误导性。
UPDATE:
在使用基于像素图的样式的平台上,某些报告的调色板颜色将与小部件的视觉外观不匹配。此问题特别影响 Windows 和 OSX,因此可以解释为什么您无法获取选项卡的明显背景颜色。此问题记录在Qt FAQ https://wiki.qt.io/Technical_FAQ#Why_does_nothing_happen_when_I_set_the_palette_background_color_on_a_QPushButton_in_some_styles.3F,这也给出了一些可能的解决方案(尽管QProxyStyle
PyQt5 支持选项,但 PyQt4 不支持)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)