2024-06-28 14:59:06 发布
网友
在PySide中,我可以通过使用values属性获取具有可能/允许的枚举数值及其字符串表示形式的字典。例如: QtWidgets.QMessageBox.StandardButton.values.items()。如何在PyQt4/PyQt5中实现相同的功能?这可能吗?我在文件里找不到这方面的信息
values
QtWidgets.QMessageBox.StandardButton.values.items()
PySide有一个内置的枚举类型(Shiboken.EnumType),它支持对名称/值进行迭代。它还支持name属性,您可以使用该属性直接从其值获取枚举器名称
Shiboken.EnumType
name
不幸的是,PyQt从来没有这些特性,因此您必须推出自己的解决方案。使用QMetaType来实现这一点很有诱惑力,但是有些类没有必要的staticMetaObject。特别是,Qt名称空间没有名称空间,这排除了对非常大的枚举组使用QMetaType
QMetaType
staticMetaObject
Qt
因此,更通用的解决方案是使用python的dir函数来构建双向映射,如下所示:
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)
输出:
Ok = 1024 QMessageBox.Ok = Ok 1024 = Ok Abort = 262144 Apply = 33554432 ButtonMask = -769 Cancel = 4194304 Close = 2097152 Default = 256 Discard = 8388608 Escape = 512 FirstButton = 1024 FlagMask = 768 Help = 16777216 Ignore = 1048576 LastButton = 134217728 No = 65536 NoAll = 131072 NoButton = 0 NoToAll = 131072 Ok = 1024 Open = 8192 Reset = 67108864 RestoreDefaults = 134217728 Retry = 524288 Save = 2048 SaveAll = 4096 Yes = 16384 YesAll = 32768 YesToAll = 32768 -769 = ButtonMask 0 = NoButton 1024 = Ok 1048576 = Ignore 131072 = NoToAll 134217728 = RestoreDefaults 16384 = Yes 16777216 = Help 2048 = Save 2097152 = Close 256 = Default 262144 = Abort 32768 = YesToAll 33554432 = Apply 4096 = SaveAll 4194304 = Cancel 512 = Escape 524288 = Retry 65536 = No 67108864 = Reset 768 = FlagMask 8192 = Open 8388608 = Discard
PySide有一个内置的枚举类型(
Shiboken.EnumType
),它支持对名称/值进行迭代。它还支持name
属性,您可以使用该属性直接从其值获取枚举器名称不幸的是,PyQt从来没有这些特性,因此您必须推出自己的解决方案。使用
QMetaType
来实现这一点很有诱惑力,但是有些类没有必要的staticMetaObject
。特别是,Qt
名称空间没有名称空间,这排除了对非常大的枚举组使用QMetaType
因此,更通用的解决方案是使用python的
dir
函数来构建双向映射,如下所示:输出:
相关问题 更多 >
编程相关推荐