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

Skip to content

Commit f60df9f

Browse files
committed
Fix bug in TkAgg backend opening/closing multiple figure windows when interactive: True.
1 parent 45c4667 commit f60df9f

File tree

1 file changed

+9
-5
lines changed

1 file changed

+9
-5
lines changed

lib/matplotlib/backends/backend_tkagg.py

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -176,6 +176,7 @@ class FigureCanvasTkAgg(FigureCanvasAgg):
176176
def __init__(self, figure, master=None, resize_callback=None):
177177
FigureCanvasAgg.__init__(self, figure)
178178
self._idle = True
179+
self._idle_callback = None
179180
t1,t2,w,h = self.figure.bbox.bounds
180181
w, h = int(w), int(h)
181182
self._tkcanvas = Tk.Canvas(
@@ -263,7 +264,8 @@ def idle_draw(*args):
263264
self.draw()
264265
self._idle = True
265266

266-
if d: self._tkcanvas.after_idle(idle_draw)
267+
if d:
268+
self._idle_callback = self._tkcanvas.after_idle(idle_draw)
267269

268270
def get_tk_widget(self):
269271
"""returns the Tk widget used to implement FigureCanvasTkAgg.
@@ -454,13 +456,15 @@ def destroy(*args):
454456

455457

456458
def destroy(self, *args):
457-
if Gcf.get_num_fig_managers()==0 and not matplotlib.is_interactive():
458-
if self.window is not None:
459-
self.window.quit()
460459
if self.window is not None:
461460
#self.toolbar.destroy()
461+
if self.canvas._idle_callback:
462+
self.canvas._tkcanvas.after_cancel(self.canvas._idle_callback)
462463
self.window.destroy()
463-
self.window = None
464+
if Gcf.get_num_fig_managers()==0:
465+
if self.window is not None:
466+
self.window.quit()
467+
self.window = None
464468

465469
def set_window_title(self, title):
466470
self.window.wm_title(title)

0 commit comments

Comments
 (0)