Skip to content

Commit 3a2e196

Browse files
committed
ENH: try to mimic pyplot's number management
Closes #4
1 parent 8284684 commit 3a2e196

File tree

3 files changed

+36
-3
lines changed

3 files changed

+36
-3
lines changed

mpl_gui/__init__.py

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -165,6 +165,15 @@ def by_label(self):
165165
)
166166
return mapping
167167

168+
@property
169+
def by_number(self):
170+
"""
171+
Return a dictionary of the current mapping number -> figures.
172+
173+
"""
174+
self._promote_and_number()
175+
return {fig.canvas.manager.num: fig for fig in self.figures}
176+
168177
@functools.wraps(figure)
169178
def figure(self, *args, **kwargs):
170179
fig = figure(*args, **kwargs)
@@ -180,6 +189,18 @@ def subplot_mosaic(self, *args, **kwargs):
180189
fig, axd = subplot_mosaic(*args, **kwargs)
181190
return self._register_fig(fig), axd
182191

192+
def _promote_and_number(self):
193+
promoted_figures = []
194+
unpromotod_figures = []
195+
for f in self.figures:
196+
if f.canvas.manager is not None:
197+
promoted_figures.append(f)
198+
else:
199+
unpromotod_figures.append(f)
200+
next_num = max([f.canvas.manager.num for f in promoted_figures], default=0) + 1
201+
for num, fig in enumerate(unpromotod_figures, start=next_num):
202+
promote_figure(fig, num=num)
203+
183204
def show_all(self, *, block=None, timeout=None):
184205
"""
185206
Show all of the Figures that the FigureRegistry knows about.
@@ -211,7 +232,7 @@ def show_all(self, *, block=None, timeout=None):
211232

212233
if timeout is None:
213234
timeout = self._timeout
214-
235+
self._promote_and_number()
215236
show(self.figures, block=self._block, timeout=self._timeout)
216237

217238
# alias to easy pyplot compatibility

mpl_gui/_promotion.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ def _auto_draw_if_interactive(fig, val):
3737
fig.canvas.draw_idle()
3838

3939

40-
def promote_figure(fig, *, auto_draw=True):
40+
def promote_figure(fig, *, auto_draw=True, num=None):
4141
"""Create a new figure manager instance."""
4242
_backend_mod = current_backend_module()
4343

@@ -57,7 +57,10 @@ def promote_figure(fig, *, auto_draw=True):
5757
return fig.canvas.manager
5858
# TODO: do we want to make sure we poison / destroy / decouple the existing
5959
# canavs?
60-
manager = _backend_mod.new_figure_manager_given_figure(next(_figure_count), fig)
60+
next_num = next(_figure_count)
61+
manager = _backend_mod.new_figure_manager_given_figure(
62+
num if num is not None else next_num, fig
63+
)
6164
if fig.get_label():
6265
manager.set_window_title(fig.get_label())
6366

mpl_gui/registry.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,15 @@
2020
for k in _fr_exports:
2121
locals()[k] = getattr(_fr, k)
2222

23+
24+
def get_figlabels():
25+
return list(_fr.by_label)
26+
27+
28+
def get_fignums():
29+
return sorted(_fr.by_number)
30+
31+
2332
# if one must. `from foo import *` is a language miss-feature, but provide
2433
# sensible behavior anyway.
2534
__all__ = _fr_exports + [

0 commit comments

Comments
 (0)