我在获取小部件的实际背景颜色方面遇到了问题。在我的特殊情况下,我在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中时,使用"none" facecolor绘制的图形具有错误的背景颜色:灰色,即使父部件为白色。为了解决这个问题,我想获取部件的背景颜色并将其设置为图形的背景颜色。虽然这可能是一个matplotlib问题,但我猜测这将是最快的解决方法。由于我注意到无法获取正确的颜色而变得坚持不懈 :)
QWidget::backgroundRole()
可以解决这种歧义,理想情况下返回适当的Base
或Window
。但显然它并没有... 我试图找出小部件在其当前父级中的正确角色似乎不太可能是“正确”的解决方案。 - sebastianQPixmap::grabWidget
成功获取了正确的颜色,但这似乎有些过度。因此,我回到了一个快速且不太通用的修复方法,并手动将matplotlib图形的颜色设置为“白色”... - sebastian