@@ -916,6 +916,55 @@ def test_span_selector_bound(direction):
916916 assert tool ._edge_handles .positions == handle_positions
917917
918918
919+ @pytest .mark .backend ('QtAgg' , skip_on_importerror = True )
920+ def test_span_selector_animated_artists_callback ():
921+ """Check that the animated artists changed in callbacks are updated."""
922+ x = np .linspace (0 , 2 * np .pi , 100 )
923+ values = np .sin (x )
924+
925+ fig , ax = plt .subplots ()
926+ (ln ,) = ax .plot (x , values , animated = True )
927+ (ln2 , ) = ax .plot ([], animated = True )
928+
929+ plt .pause (0.1 )
930+ ax .draw_artist (ln )
931+ fig .canvas .blit (fig .bbox )
932+
933+ def mean (vmin , vmax ):
934+ indmin , indmax = np .searchsorted (x , (vmin , vmax ))
935+ v = values [indmin :indmax ].mean ()
936+ print ('here' , x , v )
937+ ln2 .set_data (x , v )
938+
939+ span = widgets .SpanSelector (ax , mean , direction = 'horizontal' ,
940+ onmove_callback = mean ,
941+ interactive = True ,
942+ drag_from_anywhere = True ,
943+ useblit = True )
944+ press_data = [1 , 2 ]
945+ move_data = [2 , 2 ]
946+ do_event (span , 'press' , xdata = press_data [0 ], ydata = press_data [1 ], button = 1 )
947+ do_event (span , 'onmove' , xdata = move_data [0 ], ydata = move_data [1 ], button = 1 )
948+ assert span ._get_animated_artists () == (ln , ln2 )
949+ assert ln .stale is False
950+ assert ln2 .stale
951+ assert ln2 .get_ydata () == 0.9547335049088455
952+ span .update ()
953+ assert ln2 .stale is False
954+
955+ press_data = [4 , 2 ]
956+ move_data = [5 , 2 ]
957+ release_data = [5 , 2 ]
958+ do_event (span , 'press' , xdata = press_data [0 ], ydata = press_data [1 ], button = 1 )
959+ do_event (span , 'onmove' , xdata = move_data [0 ], ydata = move_data [1 ], button = 1 )
960+ assert ln .stale is False
961+ assert ln2 .stale
962+ assert ln2 .get_ydata () == - 0.9424150707548072
963+ do_event (span , 'release' , xdata = release_data [0 ],
964+ ydata = release_data [1 ], button = 1 )
965+ assert ln2 .stale is False
966+
967+
919968def check_lasso_selector (** kwargs ):
920969 ax = get_ax ()
921970
0 commit comments