diff --git a/qtpy/compat.py b/qtpy/compat.py index 4c6d428f..50834065 100644 --- a/qtpy/compat.py +++ b/qtpy/compat.py @@ -6,6 +6,7 @@ Compatibility functions """ import sys +import enum from . import ( PYQT5, @@ -200,3 +201,24 @@ def isalive(obj): return shiboken.isValid(obj) return None + + +# ============================================================================= +def getenumasint(enum_value): + """Get the integer value of a Qt enum + For example: + Qt.AlignmentFlag.AlignBaseline -> 256 + Qt.WidgetAttribute.WA_AcceptDrops -> 78 + If an integer is passed in, simply return it. + PySide2's enums are themselves classes, not enum values per se, so if + we get an integer or a class, return the class. + """ + if isinstance(enum_value, enum.Enum): + return enum_value.value + return enum_value + + +# ============================================================================= +def getenumfromint(enum_class, i): + """Get the Qt enum value from an integer""" + return enum_class(i) diff --git a/qtpy/tests/test_compat.py b/qtpy/tests/test_compat.py index 1e1fc28f..da53606f 100644 --- a/qtpy/tests/test_compat.py +++ b/qtpy/tests/test_compat.py @@ -1,4 +1,5 @@ """Test the compat module.""" + import sys import pytest @@ -22,3 +23,15 @@ def test_isalive(qtbot): with qtbot.waitSignal(test_widget.destroyed): test_widget.deleteLater() assert compat.isalive(test_widget) is False + + +def test_getenumasint(): + """Test compat.getenumasint""" + assert compat.getenumasint(QtWidgets.QSizePolicy.Policy.Maximum) == 4 + assert compat.getenumasint(5) == 5 + + +def test_getenumfromint(): + """Test compat.getenumfromint""" + enum_value = compat.getenumfromint(QtWidgets.QSizePolicy.Policy, 7) + assert enum_value == QtWidgets.QSizePolicy.Policy.Expanding