@@ -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