【问题标题】:Get the background color of a widget - really获取小部件的背景颜色 - 真的
【发布时间】:2014-05-25 16:37:44
【问题描述】:

我无法获取小部件的实际背景颜色。 在我的特殊情况下,我在使用 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】:

    调色板正在返回正确的颜色。

    您可能犯的错误是您假设“背景”对于所有小部件始终意味着相同的东西。我们以未修改的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。也许这是因为以前的术语现在被认为具有误导性。

    更新

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

    【讨论】:

    • 'Base' 对于选项卡外的所有小部件都是错误的。我希望 'QWidget::backgroundRole()' 会为每个小部件提供正确的颜色角色枚举.. 只能在我回到办公室后检查...
    • 换句话说 - 我希望 QWidget::backgroundRole() 能够解决我的 bgcolor 版本 1 中的这种歧义,理想情况下返回例如BaseWindow 视情况而定。但它显然没有......我试图找出一个小部件在其当前父级中的正确角色似乎不太可能是“正确”的解决方案。
    • @sebastian。如果您解释一下您想用这些信息做什么会有所帮助 - 您的实际用例是什么?
    • @sebastian。我已经用一些似乎可以识别您的问题的附加信息更新了我的答案。看起来可能值得尝试使用样式表,看看您是否可以获得您想要的结果。
    • 看了FAQ:不能换颜色,不代表也不能拿到颜色吧?!无论如何,我设法使用QPixmap::grabWidget 获得了正确的颜色,不过这似乎有点矫枉过正。所以我回到了一个快速而肮脏的非通用修复程序,并将 matplotlib 图形的颜色手动设置为white...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-27
    • 1970-01-01
    • 1970-01-01
    • 2022-09-23
    • 2015-10-16
    相关资源
    最近更新 更多