Skip to content

Commit f7d3dae

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

File tree

2 files changed

+46
-1
lines changed

2 files changed

+46
-1
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 PYQT5:
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: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,12 @@
11
"""Test the compat module."""
2+
23
import sys
34

45
import pytest
56

6-
from qtpy import QtWidgets, compat
7+
from packaging import version
8+
9+
from qtpy import QtWidgets, compat, PYQT5, PYQT_VERSION
710
from qtpy.tests.utils import not_using_conda
811

912

@@ -22,3 +25,21 @@ def test_isalive(qtbot):
2225
with qtbot.waitSignal(test_widget.destroyed):
2326
test_widget.deleteLater()
2427
assert compat.isalive(test_widget) is False
28+
29+
30+
def test_getenumasint():
31+
"""Test compat.getenumasint"""
32+
if PYQT5 and version.parse(PYQT_VERSION) <= version.parse("5.9.2"):
33+
assert compat.getenumasint(QtWidgets.QSizePolicy.Maximum) == 4
34+
else:
35+
assert compat.getenumasint(QtWidgets.QSizePolicy.Policy.Maximum) == 4
36+
assert compat.getenumasint(5) == 5
37+
38+
39+
def test_getenumfromint():
40+
"""Test compat.getenumfromint"""
41+
enum_value = compat.getenumfromint(QtWidgets.QSizePolicy.Policy, 7)
42+
if PYQT5 and version.parse(PYQT_VERSION) <= version.parse("5.9.2"):
43+
assert enum_value == QtWidgets.QSizePolicy.Expanding
44+
else:
45+
assert enum_value == QtWidgets.QSizePolicy.Policy.Expanding

0 commit comments

Comments
 (0)