Skip to content

Commit dc093a5

Browse files
cancel timeout if manually stopped
1 parent af9e3e2 commit dc093a5

File tree

1 file changed

+9
-3
lines changed

1 file changed

+9
-3
lines changed

lib/matplotlib/backends/_backend_tk.py

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -166,6 +166,7 @@ def __init__(self, figure=None, master=None, resize_callback=None):
166166
super().__init__(figure)
167167
self._idle = True
168168
self._idle_callback = None
169+
self._event_loop_id = None
169170
w, h = self.figure.bbox.size.astype(int)
170171
self._tkcanvas = tk.Canvas(
171172
master=master, background="white",
@@ -360,13 +361,16 @@ def start_event_loop(self, timeout=0):
360361
# docstring inherited
361362
milliseconds = int(1000 * timeout)
362363
if milliseconds > 0:
363-
self._master.after(milliseconds, self.stop_event_loop)
364-
elif milliseconds == 0:
365-
self._master.after_idle(self.stop_event_loop)
364+
self._event_loop_id = self._tkcanvas.after(milliseconds, self.stop_event_loop)
365+
else:
366+
self._event_loop_id = self._tkcanvas.after_idle(self.stop_event_loop)
366367
self._master.mainloop()
367368

368369
def stop_event_loop(self):
369370
# docstring inherited
371+
if self._event_loop_id:
372+
self._master.after_cancel(self._event_loop_id)
373+
self._event_loop_id = None
370374
self._master.quit()
371375

372376

@@ -442,6 +446,8 @@ def destroy(*args):
442446
def destroy(self, *args):
443447
if self.canvas._idle_callback:
444448
self.canvas._tkcanvas.after_cancel(self.canvas._idle_callback)
449+
if self.canvas._event_loop_id:
450+
self.canvas._tkcanvas.after_cancel(self.canvas._event_loop_id)
445451

446452
# NOTE: events need to be flushed before issuing destroy (GH #9956),
447453
# however, self.window.update() can break user code. This is the

0 commit comments

Comments
 (0)