8000 Merge pull request #5972 from thliebig/master · matplotlib/matplotlib@f8d7114 · GitHub
[go: up one dir, main page]

Skip to content

Commit f8d7114

Browse files
committed
Merge pull request #5972 from thliebig/master
add support for PySide2, closes #5971
2 parents a40c9ec + 118ef3b commit f8d7114

File tree

3 files changed

+44
-6
lines changed

3 files changed

+44
-6
lines changed

lib/matplotlib/backends/qt_compat.py

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,11 @@
1313
QT_API_PYQT = 'PyQt4' # API is not set here; Python 2.x default is V 1
1414
QT_API_PYQTv2 = 'PyQt4v2' # forced to Version 2 API
1515
QT_API_PYSIDE = 'PySide' # only supports Version 2 API
16-
QT_API_PYQT5 = 'PyQt5' # use PyQt5 API; Version 2 with module shim
16+
QT_API_PYQT5 = 'PyQt5' # use PyQt5 API; Version 2 with module shim
17+
QT_API_PYSIDE2 = 'PySide2' # Version 2 API with module shim
1718

1819
ETS = dict(pyqt=(QT_API_PYQTv2, 4), pyside=(QT_API_PYSIDE, 4),
19-
pyqt5=(QT_API_PYQT5, 5))
20+
pyqt5=(QT_API_PYQT5, 5), pyside2=(QT_API_PYSIDE2, 5))
2021
# ETS is a dict of env variable to (QT_API, QT_MAJOR_VERSION)
2122
# If the ETS QT_API environment variable is set, use it, but only
2223
# if the varible if of the same major QT version. Note that
@@ -68,7 +69,7 @@
6869
# PyQt4 or PySide is actually used.
6970
QT_API = rcParams['backend.qt4']
7071
else:
71-
# This is a fallback: PyQt5
72+
# This is a fallback: PyQt5 or PySide2
7273
QT_API = rcParams['backend.qt5']
7374

7475
# We will define an appropriate wrapper for the differing versions
@@ -154,13 +155,24 @@ def _getSaveFileName(*args, **kwargs):
154155
# QtCore did not get imported, fall back to pyside
155156
QT_API = QT_API_PYSIDE
156157

158+
159+
if QT_API == QT_API_PYSIDE2:
160+
try:
161+
from PySide2 import QtCore, QtGui, QtWidgets, __version__
162+
_getSaveFileName = QtWidgets.QFileDialog.getSaveFileName
163+
except ImportError:
164+
# tried PySide2, failed, fall back to PySide
165+
QT_API = rcParams['backend.qt4']
166+
QT_RC_MAJOR_VERSION = 4
167+
QT_API = QT_API_PYSIDE
168+
157169
if QT_API == QT_API_PYSIDE: # try importing pyside
158170
try:
159171
from PySide import QtCore, QtGui, __version__, __version_info__
160172
except ImportError:
161173
raise ImportError(
162174
"Matplotlib qt-based backends require an external PyQt4, PyQt5,\n"
163-
"or PySide package to be installed, but it was not found.")
175+
"PySide or PySide2 package to be installed, but it was not found.")
164176

165177
if __version_info__ < (1, 0, 3):
166178
raise ImportError(

lib/matplotlib/rcsetup.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -243,7 +243,7 @@ def validate_backend(s):
243243

244244

245245
validate_qt4 = ValidateInStrings('backend.qt4', ['PyQt4', 'PySide', 'PyQt4v2'])
246-
validate_qt5 = ValidateInStrings('backend.qt5', ['PyQt5'])
246+
validate_qt5 = ValidateInStrings('backend.qt5', ['PyQt5', 'PySide2'])
247247

248248

249249
def validate_toolbar(s):

setupext.py

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2207,8 +2207,18 @@ def __init__(self, *args, **kwargs):
22072207
BackendQtBase.__init__(self, *args, **kwargs)
22082208
self.callback = backend_qt4_internal_check
22092209

2210+
def backend_pyside2_internal_check(self):
2211+
try:
2212+
from PySide2 import __version__
2213+
from PySide2 import QtCore
2214+
except ImportError:
2215+
raise CheckFailed("PySide2 not found")
2216+
else:
2217+
BackendAgg.force = True
2218+
return ("Qt: %s, PySide2: %s" %
2219+
(QtCore.__version__, __version__))
22102220

2211-
def backend_qt5_internal_check(self):
2221+
def backend_pyqt5_internal_check(self):
22122222
try:
22132223
from PyQt5 import QtCore
22142224
except ImportError:
@@ -2223,6 +2233,22 @@ def backend_qt5_internal_check(self):
22232233
BackendAgg.force = True
22242234
return ("Qt: %s, PyQt: %s" % (self.convert_qt_version(qt_version), pyqt_version_str))
22252235

2236+
def backend_qt5_internal_check(self):
2237+
successes = []
2238+
failures = []
2239+
try:
2240+
successes.append(backend_pyside2_internal_check(self))
2241+
except CheckFailed as e:
2242+
failures.append(str(e))
2243+
2244+
try:
2245+
successes.append(backend_pyqt5_internal_check(self))
2246+
except CheckFailed as e:
2247+
failures.append(str(e))
2248+
2249+
if len(successes) == 0:
2250+
raise CheckFailed('; '.join(failures))
2251+
return '; '.join(successes + failures)
22262252

22272253
class BackendQt5(BackendQtBase):
22282254
name = "qt5agg"

0 commit comments

Comments
 (0)
0