PyQt允许的枚举值和字符串

2024-06-28 15:38:31 发布

您现在位置:Python中文网/ 问答频道 /正文

在PySide中,我可以通过使用values属性来获得包含可能/允许的枚举数值及其字符串表示形式的字典。例如: QtWidgets.QMessageBox.StandardButton.values.items()。如何在PyQt4/PyQt5中实现相同的目标?有可能吗?我在文件里找不到这方面的资料。在


Tags: 文件字符串目标字典属性itemspyqt5形式
1条回答
网友
1楼 · 发布于 2024-06-28 15:38:31

PySide有一个内置的枚举类型(Shiboken.EnumType),它支持对名称/值进行迭代。{也可以直接从其属性cd2>中获取它的值。在

不幸的是,PyQt从来没有这些特性,所以您必须推出自己的解决方案。很容易使用QMetaType来实现这一点,但是有些类没有必要的staticMetaObject。特别是,Qt名称空间没有,这就排除了将QMetaType用于非常大的枚举组的可能性。在

因此,更一般的解决方案是使用python的dir函数来构建双向映射,如下所示:

def enum_mapping(cls, enum):
    mapping = {}
    for key in dir(cls):
        value = getattr(cls, key)
        if isinstance(value, enum):
            mapping[key] = value
            mapping[value] = key
    return mapping

enum = enum_mapping(QMessageBox, QMessageBox.StandardButton)

print('Ok = %s' % enum['Ok'])
print('QMessageBox.Ok = %s' % enum[QMessageBox.Ok])
print('1024 = %s' % enum[1024])
print()

for item in sorted(enum.items(), key=str):
    print('%s = %s' % item)

输出:

^{pr2}$

相关问题 更多 >