@@ -162,6 +162,7 @@ def __init__(self, canvas, show_on_update=False):
162162 self .initialized = False
163163 self .animation_speed = 250
164164 self .animation_timer = None
165+ self .listeners = []
165166 self .animation_last_frame_time = datetime .datetime .now ()
166167 # Map custom templates to their source template
167168 self .templates = {}
@@ -175,10 +176,10 @@ def shift(self):
175176 def update (self , displays ):
176177 if self .backend .renWin and self .interactor is None :
177178 self .interactor = self .backend .renWin .GetInteractor ()
178- self .interactor .AddObserver ("TimerEvent" , self .animate )
179- self .interactor .AddObserver ("LeftButtonPressEvent" , self .click )
180- self .interactor .AddObserver ("MouseMoveEvent" , self .hover )
181- self .interactor .AddObserver ("LeftButtonReleaseEvent" , self .release )
179+ self .listeners . append ( self . interactor .AddObserver ("TimerEvent" , self .animate ) )
180+ self .listeners . append ( self . interactor .AddObserver ("LeftButtonPressEvent" , self .click ) )
181+ self .listeners . append ( self . interactor .AddObserver ("MouseMoveEvent" , self .hover ) )
182+ self .listeners . append ( self . interactor .AddObserver ("LeftButtonReleaseEvent" , self .release ) )
182183 self .init_buttons ()
183184 self .init_toolbar ()
184185
@@ -201,12 +202,30 @@ def update(self, displays):
201202 self .show ()
202203 self .show_on_update = False
203204
205+ def detach (self ):
206+ if self .toolbar is not None :
207+ self .toolbar .detach ()
208+ self .toolbar = None
209+ if self .fill_button is not None :
210+ self .fill_button .detach ()
211+ self .fill_button = None
212+ if self .text_button is not None :
213+ self .text_button .detach ()
214+ self .text_button = None
215+ if self .line_button is not None :
216+ self .line_button .detach ()
217+ self .line_button = None
218+ if self .marker_button is not None :
219+ self .marker_button .detach ()
220+ self .marker_button = None
221+
222+ for listener in self .listeners :
223+ self .interactor .RemoveObserver (listener )
224+
204225 def release (self , object , event ):
205226 if self .clicking is None :
206227 return
207228
208-
209-
210229 if datetime .datetime .now () - self .clicking [1 ] < datetime .timedelta (0 , .5 ):
211230
212231 point = self .clicking [0 ]
0 commit comments