You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 11:28:22