|
6 | 6 | from matplotlib import rcParams |
7 | 7 |
|
8 | 8 | # Available APIs. |
9 | | -QT_API_PYQT = 'PyQt4' |
10 | | -QT_API_PYSIDE = 'PySide' |
| 9 | +QT_API_PYQT = 'PyQt4' # API is not set here; Python 2.x default is V 1 |
| 10 | +QT_API_PYQTv2 = 'PyQt4v2' # forced to Version 2 API |
| 11 | +QT_API_PYSIDE = 'PySide' # only supports Version 2 API |
11 | 12 |
|
12 | | -# Select Qt binding, using the rcParams variable if available. |
13 | | -QT_API = rcParams.setdefault('backend.qt4', QT_API_PYQT) |
| 13 | +ETS = dict(pyqt=QT_API_PYQTv2, pyside=QT_API_PYSIDE) |
| 14 | + |
| 15 | +# If the ETS QT_API environment variable is set, use it. Note that |
| 16 | +# ETS requires the version 2 of PyQt4, which is not the platform |
| 17 | +# default for Python 2.x. |
| 18 | + |
| 19 | +QT_API_ENV = os.environ.get('QT_API') |
| 20 | +if QT_API_ENV is not None: |
| 21 | + try: |
| 22 | + QT_API = ETS[QT_API_ENV] |
| 23 | + except KeyError: |
| 24 | + raise RuntimeError( |
| 25 | + 'Unrecognized environment variable %r, valid values are: %r or %r' % |
| 26 | + (QT_API_ENV, 'pyqt', 'pyside')) |
| 27 | +else: |
| 28 | + # No ETS environment, so use rcParams. |
| 29 | + QT_API = rcParams['backend.qt4'] |
14 | 30 |
|
15 | 31 | # We will define an appropriate wrapper for the differing versions |
16 | 32 | # of file dialog. |
17 | 33 | _getSaveFileName = None |
18 | 34 |
|
19 | 35 | # Now perform the imports. |
20 | | -if QT_API == QT_API_PYQT: |
21 | | - from PyQt4 import QtCore, QtGui, QtSvg |
| 36 | +if QT_API in (QT_API_PYQT, QT_API_PYQTv2): |
| 37 | + import sip |
| 38 | + if QT_API == QT_API_PYQTv2: |
| 39 | + sip.setapi('QString', 2) |
| 40 | + sip.setapi('QVariant', 2) |
| 41 | + |
| 42 | + from PyQt4 import QtCore, QtGui |
22 | 43 |
|
23 | 44 | # Alias PyQt-specific functions for PySide compatibility. |
24 | 45 | QtCore.Signal = QtCore.pyqtSignal |
|
30 | 51 | QtCore.Property = QtCore.pyqtProperty |
31 | 52 | __version__ = QtCore.PYQT_VERSION_STR |
32 | 53 |
|
33 | | - import sip |
34 | 54 | try : |
35 | 55 | if sip.getapi("QString") > 1 : |
36 | 56 | # Use new getSaveFileNameAndFilter() |
|
42 | 62 | # call to getapi() can fail in older versions of sip |
43 | 63 | _getSaveFileName = QtGui.QFileDialog.getSaveFileName |
44 | 64 |
|
45 | | -elif QT_API == QT_API_PYSIDE: |
| 65 | +else: # can only be pyside |
46 | 66 | from PySide import QtCore, QtGui, __version__, __version_info__ |
47 | 67 | if __version_info__ < (1,0,3): |
48 | 68 | raise ImportError( |
49 | 69 | "Matplotlib backend_qt4 and backend_qt4agg require PySide >=1.0.3") |
50 | 70 |
|
51 | 71 | _get_save = QtGui.QFileDialog.getSaveFileName |
52 | 72 |
|
53 | | -else: |
54 | | - raise RuntimeError('Invalid Qt API %r, valid values are: %r or %r' % |
55 | | - (QT_API, QT_API_PYQT, QT_API_PYSIDE)) |
56 | 73 |
|
57 | 74 | if _getSaveFileName is None: |
58 | 75 |
|
|
0 commit comments