如何在 PyQt/PySide 中获取 QPalette 的组和角色?

Posted

技术标签:

【中文标题】如何在 PyQt/PySide 中获取 QPalette 的组和角色?【英文标题】:How to get groups and roles of a QPalette in PyQt/PySide? 【发布时间】:2015-03-11 08:32:08 【问题描述】:

我如何在 PyQt/PySide 应用程序中查询这些值,而不是“手动”定义列表 groupsroles(在下面的代码中)?

from PyQt4 import QtGui

groups = ['Disabled', 'Active', 'Inactive', 'Normal']
roles = [
            'AlternateBase',
            'Background', 
            'Base',
            'Button',
            'ButtonText',
            'BrightText',
            'Dark',
            'Foreground',
            'Highlight',
            'HighlightedText',
            'Light',
            'Link',
            'LinkVisited',
            'Mid',
            'Midlight',
            'Shadow',
            'ToolTipBase',
            'ToolTipText',
            'Text',
            'Window',
            'WindowText'
        ]

def getPaletteInfo():
    palette = QtGui.QApplication.palette()
    #build a dict with all the colors
    result =     
    for role in roles:
        print role
        for group in groups:
            qGrp = getattr(QtGui.QPalette, group)
            qRl = getattr(QtGui.QPalette, role)
            result['%s:%s' % (role, group)] =  palette.color(qGrp, qRl).rgba()
    return result

【问题讨论】:

【参考方案1】:

这可以通过标准的 Python 内省技术来完成:

for name in dir(QtGui.QPalette):
    if isinstance(getattr(QtGui.QPalette, name), QtGui.QPalette.ColorGroup):
        print(name)

QtGui.QPalette.ColorRole 也可以做到这一点。

但请注意,这会产生一些您可能没有预料到的额外项目。有NColorGroupsNColorRoles。给出每个枚举中的项目数;有几个同义词,如Window/Background;以及其他一两个,例如AllNoRole

【讨论】:

以上是关于如何在 PyQt/PySide 中获取 QPalette 的组和角色?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 PyQt/PySide 获取与特定文件类型关联的图标?

如何在 Qt/PyQt/PySide 中找到当前的 QLocale?

如何创建一个新的窗口按钮 PySide/PyQt?

如何使用线程自动关闭 PyQt/PySide 窗口?

如何在 PyQt/PySide 中将项目添加到 QComboBox

如何在 PyQt5 / PySide2 中从一个类访问属性到另一个类