diff --git a/qtpy/compat.py b/qtpy/compat.py index 4c6d428f..f1a9df88 100644 --- a/qtpy/compat.py +++ b/qtpy/compat.py @@ -5,6 +5,7 @@ """ Compatibility functions """ +import enum import sys from . import ( @@ -200,3 +201,26 @@ 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): + if PYSIDE2 or PYQT5: + return int(enum_value) + 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..b0edb055 100644 --- a/qtpy/tests/test_compat.py +++ b/qtpy/tests/test_compat.py @@ -1,9 +1,11 @@ """Test the compat module.""" + import sys import pytest +from packaging import version -from qtpy import QtWidgets, compat +from qtpy import PYQT5, PYQT_VERSION, QtWidgets, compat from qtpy.tests.utils import not_using_conda @@ -22,3 +24,21 @@ 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""" + if PYQT5 and version.parse(PYQT_VERSION) <= version.parse("5.9.2"): + assert compat.getenumasint(QtWidgets.QSizePolicy.Maximum) == 4 + else: + 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) + if PYQT5 and version.parse(PYQT_VERSION) <= version.parse("5.9.2"): + assert enum_value == QtWidgets.QSizePolicy.Expanding + else: + assert enum_value == QtWidgets.QSizePolicy.Policy.Expanding