Skip to content

Commit c744161

Browse files
authored
Merge pull request #24158 from QuLogic/fix-qt
Fix Qt with PySide6 6.4.0
2 parents 1f9dc78 + 7a3ab30 commit c744161

File tree

2 files changed

+19
-8
lines changed

2 files changed

+19
-8
lines changed

.github/workflows/tests.yml

+6-3
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,9 @@ jobs:
3737
python-version: 3.8
3838
extra-requirements: '-c requirements/testing/minver.txt'
3939
pyqt5-ver: '==5.11.2 sip==5.0.0' # oldest versions with a Py3.8 wheel.
40+
pyqt6-ver: '==6.1.0 PyQt6-Qt6==6.1.0'
41+
pyside2-ver: '==5.14.0' # oldest version with working Py3.8 wheel.
42+
pyside6-ver: '==6.0.0'
4043
delete-font-cache: true
4144
- os: ubuntu-20.04
4245
python-version: 3.8
@@ -189,17 +192,17 @@ jobs:
189192
echo 'PyQt5 is available' ||
190193
echo 'PyQt5 is not available'
191194
if [[ "${{ runner.os }}" != 'macOS' ]]; then
192-
python -mpip install --upgrade pyside2 &&
195+
python -mpip install --upgrade pyside2${{ matrix.pyside2-ver }} &&
193196
python -c 'import PySide2.QtCore' &&
194197
echo 'PySide2 is available' ||
195198
echo 'PySide2 is not available'
196199
fi
197200
if [[ "${{ matrix.os }}" = ubuntu-20.04 ]]; then
198-
python -mpip install --upgrade pyqt6 &&
201+
python -mpip install --upgrade pyqt6${{ matrix.pyqt6-ver }} &&
199202
python -c 'import PyQt6.QtCore' &&
200203
echo 'PyQt6 is available' ||
201204
echo 'PyQt6 is not available'
202-
python -mpip install --upgrade pyside6 &&
205+
python -mpip install --upgrade pyside6${{ matrix.pyside6-ver }} &&
203206
python -c 'import PySide6.QtCore' &&
204207
echo 'PySide6 is available' ||
205208
echo 'PySide6 is not available'

lib/matplotlib/backends/qt_compat.py

+13-5
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,8 @@
6969

7070

7171
def _setup_pyqt5plus():
72-
global QtCore, QtGui, QtWidgets, __version__, _isdeleted, _getSaveFileName
72+
global QtCore, QtGui, QtWidgets, __version__
73+
global _getSaveFileName, _isdeleted, _to_int
7374

7475
if QT_API == QT_API_PYQT6:
7576
from PyQt6 import QtCore, QtGui, QtWidgets, sip
@@ -78,10 +79,15 @@ def _setup_pyqt5plus():
7879
QtCore.Slot = QtCore.pyqtSlot
7980
QtCore.Property = QtCore.pyqtProperty
8081
_isdeleted = sip.isdeleted
82+
_to_int = operator.attrgetter('value')
8183
elif QT_API == QT_API_PYSIDE6:
8284
from PySide6 import QtCore, QtGui, QtWidgets, __version__
8385
import shiboken6
8486
def _isdeleted(obj): return not shiboken6.isValid(obj)
87+
if parse_version(__version__) >= parse_version('6.4'):
88+
_to_int = operator.attrgetter('value')
89+
else:
90+
_to_int = int
8591
elif QT_API == QT_API_PYQT5:
8692
from PyQt5 import QtCore, QtGui, QtWidgets
8793
import sip
@@ -90,11 +96,16 @@ def _isdeleted(obj): return not shiboken6.isValid(obj)
9096
QtCore.Slot = QtCore.pyqtSlot
9197
QtCore.Property = QtCore.pyqtProperty
9298
_isdeleted = sip.isdeleted
99+
_to_int = int
93100
elif QT_API == QT_API_PYSIDE2:
94101
from PySide2 import QtCore, QtGui, QtWidgets, __version__
95-
import shiboken2
102+
try:
103+
from PySide2 import shiboken2
104+
except ImportError:
105+
import shiboken2
96106
def _isdeleted(obj):
97107
return not shiboken2.isValid(obj)
108+
_to_int = int
98109
else:
99110
raise AssertionError(f"Unexpected QT_API: {QT_API}")
100111
_getSaveFileName = QtWidgets.QFileDialog.getSaveFileName
@@ -141,9 +152,6 @@ def _isdeleted(obj):
141152
# PyQt6 enum compat helpers.
142153

143154

144-
_to_int = operator.attrgetter("value") if QT_API == "PyQt6" else int
145-
146-
147155
@functools.lru_cache(None)
148156
def _enum(name):
149157
# foo.bar.Enum.Entry (PyQt6) <=> foo.bar.Entry (non-PyQt6).

0 commit comments

Comments
 (0)