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

Skip to content

Commit a8a2e40

Browse files
committed
Dedupe boilerplate for "adoption" of figure into pyplot.
... stuff that had a "dedupe this" comment :)
1 parent af49c1b commit a8a2e40

3 files changed

Lines changed: 19 additions & 32 deletions

File tree

lib/matplotlib/_pylab_helpers.py

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

100+
@classmethod
101+
def _set_new_active_manager(cls, manager):
102+
"""Adopt *manager* into pyplot and make it the active manager."""
103+
if not hasattr(manager, "_cidgcf"):
104+
manager._cidgcf = manager.canvas.mpl_connect(
105+
"button_press_event", lambda event: cls.set_active(manager))
106+
fig = manager.canvas.figure
107+
fig.number = manager.num
108+
label = fig.get_label()
109+
if label:
110+
manager.set_window_title(label)
111+
cls.set_active(manager)
112+
100113
@classmethod
101114
def set_active(cls, manager):
102115
"""Make *manager* the active manager."""

lib/matplotlib/figure.py

Lines changed: 2 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -2009,24 +2009,9 @@ def __setstate__(self, state):
20092009
allnums = plt.get_fignums()
20102010
num = max(allnums) + 1 if allnums else 1
20112011
mgr = plt._backend_mod.new_figure_manager_given_figure(num, self)
2012-
2013-
# XXX The following is a copy and paste from pyplot. Consider
2014-
# factoring to pylab_helpers
2015-
2016-
if self.get_label():
2017-
mgr.set_window_title(self.get_label())
2018-
2019-
# make this figure current on button press event
2020-
def make_active(event):
2021-
pylab_helpers.Gcf.set_active(mgr)
2022-
2023-
mgr._cidgcf = mgr.canvas.mpl_connect('button_press_event',
2024-
make_active)
2025-
2026-
pylab_helpers.Gcf.set_active(mgr)
2027-
self.number = num
2028-
2012+
pylab_helpers.Gcf._set_new_active_manager(mgr)
20292013
plt.draw_if_interactive()
2014+
20302015
self.stale = True
20312016

20322017
def add_axobserver(self, func):

lib/matplotlib/pyplot.py

Lines changed: 4 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -520,28 +520,17 @@ def figure(num=None, # autoincrement if None, else integer from 1-N
520520
frameon=frameon,
521521
FigureClass=FigureClass,
522522
**kwargs)
523-
523+
fig = figManager.canvas.figure
524524
if figLabel:
525-
figManager.set_window_title(figLabel)
526-
figManager.canvas.figure.set_label(figLabel)
527-
528-
# make this figure current on button press event
529-
def make_active(event):
530-
_pylab_helpers.Gcf.set_active(figManager)
525+
fig.set_label(figLabel)
531526

532-
cid = figManager.canvas.mpl_connect('button_press_event', make_active)
533-
figManager._cidgcf = cid
534-
535-
_pylab_helpers.Gcf.set_active(figManager)
536-
fig = figManager.canvas.figure
537-
fig.number = num
527+
_pylab_helpers.Gcf._set_new_active_manager(figManager)
538528

539529
# make sure backends (inline) that we don't ship that expect this
540530
# to be called in plotting commands to make the figure call show
541531
# still work. There is probably a better way to do this in the
542532
# FigureManager base class.
543-
if matplotlib.is_interactive():
544-
draw_if_interactive()
533+
draw_if_interactive()
545534

546535
if _INSTALL_FIG_OBSERVER:
547536
fig.stale_callback = _auto_draw_if_interactive

0 commit comments

Comments
 (0)