PySide에서는 values
속성을 사용하여 가능한/허용 열거 자 값과 해당 문자열 표현으로 사전을 가져올 수 있습니다. 예 : QtWidgets.QMessageBox.StandardButton.values.items()
. 어떻게 PyQt4/PyQt5에서 동일한 달성하기 위해? 그게 가능한가? 나는 이것에 대해 문서에서 아무것도 발견하지 못했다.PyQt는 열거 형 값과 문자열을 허용했습니다.
1
A
답변
1
PySide에는 이름/값에 대한 반복을 지원하는 내장 열거 형 (Shiboken.EnumType
)이 있습니다. 또한 값에서 직접 열거 자 이름을 가져 오는 데 사용할 수있는 name
특성도 지원합니다.
불행히도 PyQt에는 이러한 기능이 없었기 때문에 자신 만의 솔루션을 사용해야합니다. 이 경우 QMetaType
을 사용하기를 원하지만 일부 클래스는 필요하지 않습니다. staticMetaObject
. 특히 Qt
네임 스페이스에는 매우 큰 그룹의 enum에 대해 QMetaType
을 사용하지 않기로 한 네임 스페이스가 없습니다.
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
그래서 더 일반적인 솔루션은 다음과 같이 양방향 매핑을 구축하는 파이썬의 dir
기능을 사용하는 것입니다
관련 문제
- 1. NSNumber를 신속한 열거 형 값과 어떻게 비교합니까?
- 2. 문자열 값과 열거 형 문자열 값 비교
- 3. 다른 문자열을 tostring 열거 형
- 4. 열거 형 내의 열거 형
- 5. 열거 형 내의 열거 형
- 6. 표 형식의 열거 형 열거 형 표현
- 7. DB의 열거 형 또는 열거 형 열거 형
- 8. linq을 사용하여 열거 형 값과 일부 열거 형 값을 비교하는 방법
- 9. 문자열을 해당 열거 형 값으로 변환하십시오.
- 10. 복합 형 열거 형
- 11. 문화권 전용 열거 형 DisplayName 문자열을 열거 형으로 변환
- 12. MongoDB의 열거 형
- 13. 다른 열거 형 값에 열거 형 지정
- 14. 열거 형 대 강력한 형식의 열거 형
- 15. Regex MySQL에서 열거 형
- 16. 열거 형?
- 17. 열거 형
- 18. WCF REST 호출의 기본 열거 형 값과 관련된 문제
- 19. 열거 형 값과 함께 사용하기 위해 EnumMap의 Java에 해당합니까?
- 20. 열거 형 확장
- 21. 열거 형 상자에서 메서드
- 22. 자바 열거 형 값을 비교
- 23. 다른 열거 형의 열거 형
- 24. 방법, 열거 형식으로 열거 형
- 25. 빠른 열거 형 질문
- 26. NSStringEncoding - 열거 형의 열거 형 열거
- 27. URI 템플릿의 열거 형?
- 28. 열거 형 참조가 클래스 <?> 일 때 문자열을 열거 형 값으로 변환하는 방법은 무엇입니까?
- 29. 자바 : 컴파일시 열거 형 값?
- 30. 관련된 값을 가진 열거 형