获取小部件的背景颜色-确实

问题描述 投票:3回答:1

我在获取小部件的实际背景颜色时遇到麻烦。在我的特殊情况下,我无法使用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时会以错误的背景色绘制带有“无”面色的图形:灰色,即使父级窗口小部件是白色。

要解决此问题,我想获取小部件的背景色并将其设置为图形的背景色。尽管这可能是matplotlib问题,但我猜想这将是最快的解决方法。我注意到我无法获得正确的颜色,所以我坚持了:)

python qt matplotlib pyqt
1个回答
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指出BackgroundForeground是过时的值,而建议使用WindowWindowText。也许是因为以前的术语现在被认为具有误导性。

UPDATE

在使用基于像素图的样式的平台上,某些报告的调色板颜色将与小部件的视觉外观不匹配。此问题特别影响Windows和OSX,因此可以解释为什么您无法获得选项卡的明显背景色。 Qt FAQ中记录了此问题,该问题还提供了一些可能的解决方案(尽管PyQt5支持QProxyStyle选项,但PyQt4不支持)。

© www.soinside.com 2019 - 2024. All rights reserved.