1818from ._base_selector import BaseSelector
1919
2020
21- class LinearSelector (Graphic , BaseSelector ):
21+ class LinearSelector (BaseSelector ):
2222 @property
2323 def limits (self ) -> Tuple [float , float ]:
2424 return self ._limits
@@ -117,9 +117,6 @@ def __init__(
117117
118118 line_data = line_data .astype (np .float32 )
119119
120- # init Graphic
121- Graphic .__init__ (self , name = name )
122-
123120 if thickness < 1.1 :
124121 material = pygfx .LineThinMaterial
125122 else :
@@ -172,6 +169,7 @@ def __init__(
172169 hover_responsive = (line_inner , self .line_outer ),
173170 arrow_keys_modifier = arrow_keys_modifier ,
174171 axis = axis ,
172+ name = name ,
175173 )
176174
177175 def _setup_ipywidget_slider (self , widget ):
@@ -189,8 +187,6 @@ def _setup_ipywidget_slider(self, widget):
189187 # user changes linear selection -> widget changes
190188 self .selection .add_event_handler (self ._update_ipywidgets )
191189
192- self ._plot_area .renderer .add_event_handler (self ._set_slider_layout , "resize" )
193-
194190 self ._handled_widgets .append (widget )
195191
196192 def _update_ipywidgets (self , ev ):
@@ -214,6 +210,12 @@ def _ipywidget_callback(self, change):
214210
215211 self .selection = change ["new" ]
216212
213+ def _add_plot_area_hook (self , plot_area ):
214+ super ()._add_plot_area_hook (plot_area = plot_area )
215+
216+ # resize the slider widgets when the canvas is resized
217+ self ._plot_area .renderer .add_event_handler (self ._set_slider_layout , "resize" )
218+
217219 def _set_slider_layout (self , * args ):
218220 w , h = self ._plot_area .renderer .logical_size
219221
@@ -375,3 +377,11 @@ def _move_graphic(self, delta: np.ndarray):
375377 self .selection = self .selection () + delta [0 ]
376378 else :
377379 self .selection = self .selection () + delta [1 ]
380+
381+ def _cleanup (self ):
382+ super ()._cleanup ()
383+
384+ for widget in self ._handled_widgets :
385+ widget .unobserve (self ._ipywidget_callback , "value" )
386+
387+ self ._plot_area .renderer .remove_event_handler (self ._set_slider_layout , "resize" )
0 commit comments