8000 Fix handling of getSaveFileName to be consistent · matplotlib/matplotlib@515b57c · GitHub
[go: up one dir, main page]

Skip to content

Commit 515b57c

Browse files
author
Martin Fitzpatrick
committed
Fix handling of getSaveFileName to be consistent
PyQt4 and PyQt5 handle getSaveFileName differently, returning either a filename or a filename,filter tuple respectively. PySide behaves as for PyQt5. This caused bug #3454 producing an 'format not supported' error as the tuple did not match any of the string types. This updates each API to return a tuple as per PyQt5 (following the principle of using the latest API as a target). For recent PyQt4 this means using getSaveFileNameAndFilter instead, for older PyQt4 we wrap the function to output a tuple. Figure saving has been tested on PySide, PyQt4 and PyQt5.
1 parent 561462f commit 515b57c

File tree

2 files changed

+9
-13
lines changed

2 files changed

+9
-13
lines changed

lib/matplotlib/backends/backend_qt5.py

Lines changed: 1 addition & 1 deletion
8000
Original file line numberDiff line numberDiff line change
@@ -715,7 +715,7 @@ def save_figure(self, *args):
715715
filters.append(filter)
716716
filters = ';;'.join(filters)
717717

718-
fname = _getSaveFileName(self.parent, "Choose a filename to save to",
718+
fname, filter = _getSaveFileName(self.parent, "Choose a filename to save to",
719719
start, filters, selectedFilter)
720720
if fname:
721721
if startpath == '':

lib/matplotlib/backends/qt_compat.py

Lines changed: 8 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -78,21 +78,19 @@
7878
try:
7979
if sip.getapi("QString") > 1:
8080
# Use new getSaveFileNameAndFilter()
81-
_get_save = QtGui.QFileDialog.getSaveFileNameAndFilter
81+
_getSaveFileName = QtGui.QFileDialog.getSaveFileNameAndFilter
8282
else:
8383
# Use old getSaveFileName()
84-
_getSaveFileName = QtGui.QFileDialog.getSaveFileName
84+
def _getSaveFileName(*args, **kwargs):
85+
return QtGui.QFileDialog.getSaveFileName(*args, **kwargs), None
86+
8587
except (AttributeError, KeyError):
8688
# call to getapi() can fail in older versions of sip
87-
_getSaveFileName = QtGui.QFileDialog.getSaveFileName
89+
def _getSaveFileName(*args, **kwargs):
90+
return QtGui.QFileDialog.getSaveFileName(*args, **kwargs), None
8891

8992
else: # PyQt5 API
90-
9193
from PyQt5 import QtCore, QtGui, QtWidgets
92-
93-
# Additional PyQt5 shimming to make it appear as for PyQt4
94-
95-
_get_save = QtWidgets.QFileDialog.getSaveFileName
9694
_getSaveFileName = QtWidgets.QFileDialog.getSaveFileName
9795

9896
# Alias PyQt-specific functions for PySide compatibility.
@@ -112,11 +110,8 @@
112110
raise ImportError(
113111
"Matplotlib backend_qt4 and backend_qt4agg require PySide >=1.0.3")
114112

115-
_get_save = QtGui.QFileDialog.getSaveFileName
113+
_getSaveFileName = QtGui.QFileDialog.getSaveFileName
116114

117-
if _getSaveFileName is None:
118-
def _getSaveFileName(self, msg, start, filters, selectedFilter):
119-
return _get_save(self, msg, start, filters, selectedFilter)[0]
120115

121116
# Apply shim to Qt4 APIs to make them look like Qt5
122117
if QT_API in (QT_API_PYQT, QT_API_PYQTv2, QT_API_PYSIDE):
@@ -128,3 +123,4 @@ def _getSaveFileName(self, msg, start, filters, selectedFilter):
128123
129124
'''
130125
QtWidgets = QtGui
126+

0 commit comments

Comments
 (0)
0