|
13 | 13 | QT_API_PYQT = 'PyQt4' # API is not set here; Python 2.x default is V 1 |
14 | 14 | QT_API_PYQTv2 = 'PyQt4v2' # forced to Version 2 API |
15 | 15 | 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 |
17 | 18 |
|
18 | 19 | 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)) |
20 | 21 | # ETS is a dict of env variable to (QT_API, QT_MAJOR_VERSION) |
21 | 22 | # If the ETS QT_API environment variable is set, use it, but only |
22 | 23 | # if the varible if of the same major QT version. Note that |
|
64 | 65 | # A different backend was specified, but we still got here because a Qt |
65 | 66 | # related file was imported. This is allowed, so lets try and guess |
66 | 67 | # what we should be using. |
67 | | - if "PyQt4" in sys.modules or "PySide" in sys.modules: |
| 68 | + if "PyQt4" in sys.modules or ("PySide" in sys.modules and not "PySide2" in sys.modules): |
68 | 69 | # PyQt4 or PySide is actually used. |
69 | 70 | QT_API = rcParams['backend.qt4'] |
70 | 71 | else: |
@@ -154,13 +155,24 @@ def _getSaveFileName(*args, **kwargs): |
154 | 155 | # QtCore did not get imported, fall back to pyside |
155 | 156 | QT_API = QT_API_PYSIDE |
156 | 157 |
|
| 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 | + |
157 | 169 | if QT_API == QT_API_PYSIDE: # try importing pyside |
158 | 170 | try: |
159 | 171 | from PySide import QtCore, QtGui, __version__, __version_info__ |
160 | 172 | except ImportError: |
161 | 173 | raise ImportError( |
162 | | - "Matplotlib qt-based backends require an external PyQt4, PyQt5,\n" |
163 | | - "or PySide package to be installed, but it was not found.") |
| 174 | + "Matplotlib qt-based backends require an external PyQt4, PyQt5, PySide,\n" |
| 175 | + "or PySide2 package to be installed, but it was not found.") |
164 | 176 |
|
165 | 177 | if __version_info__ < (1, 0, 3): |
166 | 178 | raise ImportError( |
|
0 commit comments