PyQt6中QStyle.StandardPixmap是如何定义的

问题描述 投票:0回答:1

PyQt6 中 QStyle.StandardPixmap 的枚举是如何定义的?我尝试复制它,如下所示:

from enum import Enum

class bootlegPixmap(Enum):
    SP_TitleBarMenuButton = 0
    SP_TitleBarMinButton = 1
    SP_TitleBarMaxButton = 2

for y in bootlegPixmap:
    print(y)

我得到以下输出:

bootlegPixmap.SP_TitleBarMenuButton
bootlegPixmap.SP_TitleBarMinButton
bootlegPixmap.SP_TitleBarMaxButton

如果我尝试使用以下代码迭代原始内容:

from PyQt6.QtWidgets import QStyle
for x in QStyle.StandardPixmap:
    print(x)

我只得到数值:

0
1
2
...
python enums pyqt pyqt6
1个回答
0
投票

这与 PyQt 本身无关。这只是 Python enum 类 的正常行为。默认情况下,

IntEnum/IntFlag
的成员打印他们的numerical值;因此,如果您想要更多信息输出,您应该使用
repr
代替:

>>> import enum
>>>
>>> class X(enum.IntEnum): A = 1
...
>>> f'{X.A} - {X.A!r}'
1 - <X.A: 1>

相比之下,

Enum
的成员具有不透明的值,因此它们默认为值的文本表示:

>>> class Y(enum.Enum): A = 1
...
>>> f'{Y.A} - {Y.A!r}'
Y.A - <Y.A: 1>

不用说,PyQt 总是使用整数类,因为这最接近它们在 Qt 中的定义方式:

>>> from PyQt6.QtWidgets import QStyle
>>>
>>> QStyle.StandardPixmap.mro()
[<enum 'StandardPixmap'>, <enum 'IntEnum'>, <class 'int'>, <enum 'ReprEnum'>, <enum 'Enum'>, <class 'object'>]
>>>
>>> f'{QStyle.StandardPixmap.SP_ArrowUp} - {QStyle.StandardPixmap.SP_ArrowUp!r}'
>>> '50 - <StandardPixmap.SP_ArrowUp: 50>'
© www.soinside.com 2019 - 2024. All rights reserved.