From a6b34d497d27191b28395b910d3f0822de5e997c Mon Sep 17 00:00:00 2001 From: Antony Lee Date: Mon, 22 Jan 2018 13:11:16 -0800 Subject: [PATCH] Unset the canvas manager when saving the figure. Saving a figure may involve temporarily resizing the canvas (e.g. due to different dpi), but we don't want that resize to be propagated to the actual GUI widget. Ensure this by temporarily unsetting the manager as well. --- lib/matplotlib/backend_bases.py | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/lib/matplotlib/backend_bases.py b/lib/matplotlib/backend_bases.py index 9909634b89e2..5d0f8b728009 100644 --- a/lib/matplotlib/backend_bases.py +++ b/lib/matplotlib/backend_bases.py @@ -2149,6 +2149,15 @@ def print_figure(self, filename, dpi=None, facecolor=None, edgecolor=None, """ self._is_saving = True + # Remove the figure manager, if any, to avoid resizing the GUI widget. + # Having *no* manager and a *None* manager are currently different (see + # Figure.show); should probably be normalized to None at some point. + _no_manager = object() + if hasattr(self, 'manager'): + manager = self.manager + del self.manager + else: + manager = _no_manager if format is None: # get format from filename, or from backend's default filetype @@ -2267,8 +2276,9 @@ def print_figure(self, filename, dpi=None, facecolor=None, edgecolor=None, self.figure.set_facecolor(origfacecolor) self.figure.set_edgecolor(origedgecolor) self.figure.set_canvas(self) + if manager is not _no_manager: + self.manager = manager self._is_saving = False - #self.figure.canvas.draw() ## seems superfluous return result @classmethod