Skip to content

Commit fef4bda

Browse files
committed
compat.py: Add utility functions that convert between ints and Qt Enums
1 parent 0f7b181 commit fef4bda

File tree

2 files changed

+37
-0
lines changed

2 files changed

+37
-0
lines changed

qtpy/compat.py

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
"""
66
Compatibility functions
77
"""
8+
import enum
89
import sys
910

1011
from . import (
@@ -200,3 +201,26 @@ def isalive(obj):
200201

201202
return shiboken.isValid(obj)
202203
return None
204+
205+
206+
# =============================================================================
207+
def getenumasint(enum_value):
208+
"""Get the integer value of a Qt enum
209+
For example:
210+
Qt.AlignmentFlag.AlignBaseline -> 256
211+
Qt.WidgetAttribute.WA_AcceptDrops -> 78
212+
If an integer is passed in, simply return it.
213+
PySide2's enums are themselves classes, not enum values per se, so if
214+
we get an integer or a class, return the class.
215+
"""
216+
if isinstance(enum_value, enum.Enum):
217+
if PYSIDE2 or PYSIDE6:
218+
return int(enum_value)
219+
return enum_value.value
220+
return enum_value
221+
222+
223+
# =============================================================================
224+
def getenumfromint(enum_class, i):
225+
"""Get the Qt enum value from an integer"""
226+
return enum_class(i)

qtpy/tests/test_compat.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
"""Test the compat module."""
2+
23
import sys
34

45
import pytest
@@ -22,3 +23,15 @@ def test_isalive(qtbot):
2223
with qtbot.waitSignal(test_widget.destroyed):
2324
test_widget.deleteLater()
2425
assert compat.isalive(test_widget) is False
26+
27+
28+
def test_getenumasint():
29+
"""Test compat.getenumasint"""
30+
assert compat.getenumasint(QtWidgets.QSizePolicy.Policy.Maximum) == 4
31+
assert compat.getenumasint(5) == 5
32+
33+
34+
def test_getenumfromint():
35+
"""Test compat.getenumfromint"""
36+
enum_value = compat.getenumfromint(QtWidgets.QSizePolicy.Policy, 7)
37+
assert enum_value == QtWidgets.QSizePolicy.Policy.Expanding

0 commit comments

Comments
 (0)