Skip to content

Commit b26b184

Browse files
authored
Merge pull request #16209 from anntzer/unpickle
Dedupe boilerplate for "adoption" of figure into pyplot.
2 parents 7b0cfe4 + a8a2e40 commit b26b184

File tree

3 files changed

+19
-32
lines changed

3 files changed

+19
-32
lines changed

lib/matplotlib/_pylab_helpers.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,19 @@ def get_active(cls):
105105
"""Return the active manager, or *None* if there is no manager."""
106106
return next(reversed(cls.figs.values())) if cls.figs else None
107107

108+
@classmethod
109+
def _set_new_active_manager(cls, manager):
110+
"""Adopt *manager* into pyplot and make it the active manager."""
111+
if not hasattr(manager, "_cidgcf"):
112+
manager._cidgcf = manager.canvas.mpl_connect(
113+
"button_press_event", lambda event: cls.set_active(manager))
114+
fig = manager.canvas.figure
115+
fig.number = manager.num
116+
label = fig.get_label()
117+
if label:
118+
manager.set_window_title(label)
119+
cls.set_active(manager)
120+
108121
@classmethod
109122
def set_active(cls, manager):
110123
"""Make *manager* the active manager."""

lib/matplotlib/figure.py

Lines changed: 2 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -2015,24 +2015,9 @@ def __setstate__(self, state):
20152015
allnums = plt.get_fignums()
20162016
num = max(allnums) + 1 if allnums else 1
20172017
mgr = plt._backend_mod.new_figure_manager_given_figure(num, self)
2018-
2019-
# XXX The following is a copy and paste from pyplot. Consider
2020-
# factoring to pylab_helpers
2021-
2022-
if self.get_label():
2023-
mgr.set_window_title(self.get_label())
2024-
2025-
# make this figure current on button press event
2026-
def make_active(event):
2027-
pylab_helpers.Gcf.set_active(mgr)
2028-
2029-
mgr._cidgcf = mgr.canvas.mpl_connect('button_press_event',
2030-
make_active)
2031-
2032-
pylab_helpers.Gcf.set_active(mgr)
2033-
self.number = num
2034-
2018+
pylab_helpers.Gcf._set_new_active_manager(mgr)
20352019
plt.draw_if_interactive()
2020+
20362021
self.stale = True
20372022

20382023
def add_axobserver(self, func):

lib/matplotlib/pyplot.py

Lines changed: 4 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -587,28 +587,17 @@ def figure(num=None, # autoincrement if None, else integer from 1-N
587587
frameon=frameon,
588588
FigureClass=FigureClass,
589589
**kwargs)
590-
590+
fig = figManager.canvas.figure
591591
if figLabel:
592-
figManager.set_window_title(figLabel)
593-
figManager.canvas.figure.set_label(figLabel)
594-
595-
# make this figure current on button press event
596-
def make_active(event):
597-
_pylab_helpers.Gcf.set_active(figManager)
592+
fig.set_label(figLabel)
598593

599-
cid = figManager.canvas.mpl_connect('button_press_event', make_active)
600-
figManager._cidgcf = cid
601-
602-
_pylab_helpers.Gcf.set_active(figManager)
603-
fig = figManager.canvas.figure
604-
fig.number = num
594+
_pylab_helpers.Gcf._set_new_active_manager(figManager)
605595

606596
# make sure backends (inline) that we don't ship that expect this
607597
# to be called in plotting commands to make the figure call show
608598
# still work. There is probably a better way to do this in the
609599
# FigureManager base class.
610-
if matplotlib.is_interactive():
611-
draw_if_interactive()
600+
draw_if_interactive()
612601

613602
if _INSTALL_FIG_OBSERVER:
614603
fig.stale_callback = _auto_draw_if_interactive

0 commit comments

Comments
 (0)