Как получить группы и роли QPalette в PyQt/PySide?

Вместо "ручного" определения списков groups а также roles (в моем коде ниже), как я могу запросить приложение PyQt/PySide для этих значений?

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,

Но обратите внимание, что это произведет несколько дополнительных предметов, которые вы, возможно, не ожидаете. Есть NColorGroups а также NColorRoles, которые дают количество элементов в каждом перечислении; Есть несколько синонимов, таких как Window/Background; и один или два других, таких как All а также NoRole,

Другие вопросы по тегам