Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 2ca68c1

Browse files
committed
Merge pull request #390 from efiring/qtchoose
qt4_compat.py: updated to match ipython 0.11 RC 1.
2 parents d358a5d + 9a50214 commit 2ca68c1

4 files changed

Lines changed: 108 additions & 78 deletions

File tree

lib/matplotlib/backends/qt4_compat.py

Lines changed: 49 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -2,60 +2,77 @@
22
"""
33

44
import os
5+
import warnings
6+
from matplotlib import rcParams
57

68
# Available APIs.
7-
QT_API_PYQT = 'pyqt'
8-
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
912

10-
# Select PyQt4 or PySide using an environment variable, in the same way IPython does.
11-
# IPython is using PyQt as default (for now) so we will too.
12-
QT_API = os.environ.get('QT_API', QT_API_PYQT)
13+
ETS = dict(pyqt=QT_API_PYQTv2, pyside=QT_API_PYSIDE)
1314

14-
if QT_API == QT_API_PYQT:
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:
1521
try:
16-
from PyQt4 import QtCore, QtGui
17-
except ImportError:
18-
raise ImportError("Qt4 backend requires that PyQt4 is installed.")
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']
30+
31+
# We will define an appropriate wrapper for the differing versions
32+
# of file dialog.
33+
_getSaveFileName = None
34+
35+
# Now perform the imports.
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
43+
1944
# Alias PyQt-specific functions for PySide compatibility.
45+
QtCore.Signal = QtCore.pyqtSignal
2046
try:
2147
QtCore.Slot = QtCore.pyqtSlot
2248
except AttributeError:
23-
QtCore.Slot = pyqtSignature # Not a perfect match but
49+
QtCore.Slot = pyqtSignature # Not a perfect match but
2450
# works in simple cases
2551
QtCore.Property = QtCore.pyqtProperty
2652
__version__ = QtCore.PYQT_VERSION_STR
27-
import sip
53+
2854
try :
2955
if sip.getapi("QString") > 1 :
3056
# Use new getSaveFileNameAndFilter()
31-
_getSaveFileName = lambda self, msg, start, filters, \
32-
selectedFilter : \
33-
QtGui.QFileDialog.getSaveFileNameAndFilter( \
34-
self, msg, start, filters, selectedFilter)[0]
57+
_get_save = QtGui.QFileDialog.getSaveFileNameAndFilter
3558
else :
3659
# Use old getSaveFileName()
3760
_getSaveFileName = QtGui.QFileDialog.getSaveFileName
3861
except (AttributeError, KeyError) :
3962
# call to getapi() can fail in older versions of sip
40-
# Use the old getSaveFileName()
4163
_getSaveFileName = QtGui.QFileDialog.getSaveFileName
4264

43-
elif QT_API == QT_API_PYSIDE:
44-
try:
45-
from PySide import QtCore, QtGui, __version__, __version_info__
46-
except ImportError:
47-
raise ImportError("Qt4 backend requires that PySide is installed.")
65+
else: # can only be pyside
66+
from PySide import QtCore, QtGui, __version__, __version_info__
4867
if __version_info__ < (1,0,3):
49-
raise ImportError("Matplotlib backend_qt4 and backend_qt4agg require PySide >=1.0.3")
68+
raise ImportError(
69+
"Matplotlib backend_qt4 and backend_qt4agg require PySide >=1.0.3")
5070

51-
# Alias PySide-specific function for PyQt compatibilty
52-
QtCore.pyqtProperty = QtCore.Property
53-
QtCore.pyqtSignature = QtCore.Slot # Not a perfect match but
54-
# works in simple cases
71+
_get_save = QtGui.QFileDialog.getSaveFileName
72+
73+
74+
if _getSaveFileName is None:
75+
76+
def _getSaveFileName(self, msg, start, filters, selectedFilter):
77+
return _get_save(self, msg, start, filters, selectedFilter)[0]
5578

56-
_getSaveFileName = lambda self, msg, start, filters, selectedFilter : \
57-
QtGui.QFileDialog.getSaveFileName(self, \
58-
msg, start, filters, selectedFilter)[0]
59-
else:
60-
raise RuntimeError('Invalid Qt API %r, valid values are: %r or %r' %
61-
(QT_API, QT_API_PYQT, QT_API_PYSIDE))

0 commit comments

Comments
 (0)