33
44import os
55import warnings
6+ from matplotlib import rcParams
67
78# Available APIs.
8- QT_API_PYQT = 'pyqt '
9- QT_API_PYSIDE = 'pyside '
9+ QT_API_PYQT = 'PyQt4 '
10+ QT_API_PYSIDE = 'PySide '
1011
11- def prepare_pyqt4 ():
12- # For PySide compatibility, use the new-style string API that automatically
13- # converts QStrings to Unicode Python strings. Also, automatically unpack
14- # QVariants to their underlying objects.
15- import sip
16- sip .setapi ('QString' , 2 )
17- sip .setapi ('QVariant' , 2 )
18-
19- # Select Qt binding, using the QT_API environment variable if available.
20- QT_API = os .environ .get ('QT_API' )
21- if QT_API is None :
22- try :
23- import PySide
24- if PySide .__version_info__ < (1 ,0 ,3 ):
25- warnings .warn ("PySide found with version < 1.0.3; trying PyQt4" )
26- raise ImportError
27- QT_API = QT_API_PYSIDE
28- except ImportError :
29- try :
30- prepare_pyqt4 ()
31- import PyQt4
32- QT_API = QT_API_PYQT
33- except ImportError :
34- raise ImportError ('Cannot import PySide or PyQt4' )
12+ # Select Qt binding, using the rcParams variable if available.
13+ QT_API = rcParams .setdefault ('backend.qt4' , QT_API_PYQT )
3514
36- elif QT_API == QT_API_PYQT :
37- # Note: This must be called *before* PyQt4 is imported .
38- prepare_pyqt4 ()
15+ # We will define an appropriate wrapper for the differing versions
16+ # of file dialog .
17+ _getSaveFileName = None
3918
4019# Now perform the imports.
4120if QT_API == QT_API_PYQT :
@@ -51,8 +30,17 @@ def prepare_pyqt4():
5130 QtCore .Property = QtCore .pyqtProperty
5231 __version__ = QtCore .PYQT_VERSION_STR
5332
54- # Use new getSaveFileNameAndFilter()
55- _get_save = QtGui .QFileDialog .getSaveFileNameAndFilter
33+ import sip
34+ try :
35+ if sip .getapi ("QString" ) > 1 :
36+ # Use new getSaveFileNameAndFilter()
37+ _get_save = QtGui .QFileDialog .getSaveFileNameAndFilter
38+ else :
39+ # Use old getSaveFileName()
40+ _getSaveFileName = QtGui .QFileDialog .getSaveFileName
41+ except (AttributeError , KeyError ) :
42+ # call to getapi() can fail in older versions of sip
43+ _getSaveFileName = QtGui .QFileDialog .getSaveFileName
5644
5745elif QT_API == QT_API_PYSIDE :
5846 from PySide import QtCore , QtGui , __version__ , __version_info__
@@ -66,6 +54,8 @@ def prepare_pyqt4():
6654 raise RuntimeError ('Invalid Qt API %r, valid values are: %r or %r' %
6755 (QT_API , QT_API_PYQT , QT_API_PYSIDE ))
6856
69- def _getSaveFileName (self , msg , start , filters , selectedFilter ):
70- return _get_save (self , msg , start , filters , selectedFilter )[0 ]
57+ if _getSaveFileName is None :
58+
59+ def _getSaveFileName (self , msg , start , filters , selectedFilter ):
60+ return _get_save (self , msg , start , filters , selectedFilter )[0 ]
7161
0 commit comments