PyQt6中QStyle.StandardPixmap枚举的定义及遍历输出差异问题
QStyle.StandardPixmap 枚举的定义逻辑
PyQt里的QStyle.StandardPixmap并非用Python标准库的Enum实现,而是对Qt原生C++枚举的Python绑定,这就是它和你自定义枚举行为不同的核心原因。
行为差异的根源
你基于标准Enum写的枚举,每个成员都是Enum类的实例,打印时会输出枚举类.成员名的格式;而PyQt绑定的Qt枚举本质是带枚举特性的整数类型,成员本身等价于对应的整数值,所以直接打印只会输出数字。
模拟PyQt枚举的实现方式
如果要在Python里写出和QStyle.StandardPixmap行为一致的枚举,最简单的方法是用IntEnum替代Enum:
from enum import IntEnum class bootlegPixmap(IntEnum): SP_TitleBarMenuButton = 0 SP_TitleBarMinButton = 1 SP_TitleBarMaxButton = 2 for y in bootlegPixmap: print(y) # 输出0、1、2,和PyQt原生枚举行为完全一致
IntEnum是标准库enum模块的子类,它的成员会被当作整数处理,同时保留枚举的遍历、成员名映射等特性,完美匹配PyQt枚举的表现。
额外技巧:获取PyQt枚举的成员名称
如果遍历PyQt原生枚举时想拿到成员名称,可以调用枚举的name()方法:
from PyQt6.QtWidgets import QStyle for x in QStyle.StandardPixmap: print(x.name(), x.value) # 输出成员名称和对应的数值
内容的提问来源于stack exchange,提问作者user1801060
相关产品推荐
相关产品推荐

