@@ -569,24 +569,39 @@ def _clicked(self, event):
569
569
if event .inaxes != self .ax :
570
570
return
571
571
572
- for p , t , lines in zip (self .rectangles , self .labels , self . lines ):
572
+ for i , ( p , t ) in enumerate ( zip (self .rectangles , self .labels ) ):
573
573
if (t .get_window_extent ().contains (event .x , event .y ) or
574
574
p .get_window_extent ().contains (event .x , event .y )):
575
- l1 , l2 = lines
576
- l1 .set_visible (not l1 .get_visible ())
577
- l2 .set_visible (not l2 .get_visible ())
578
- thist = t
575
+ self .set_active (i )
579
576
break
580
577
else :
581
578
return
582
579
580
+ def set_active (self , index ):
581
+ """
582
+ Directly (de)activate a check button by index.
583
+
584
+ *index* is an index into the original label list
585
+ that this object was constructed with.
586
+ Raises ValueError if *index* is invalid.
587
+
588
+ Callbacks will be triggered if :attr:`eventson` is True.
589
+
590
+ """
591
+ if 0 > index >= len (self .labels ):
592
+ raise ValueError ("Invalid CheckButton index: %d" % index )
593
+
594
+ l1 , l2 = self .lines [index ]
595
+ l1 .set_visible (not l1 .get_visible ())
596
+ l2 .set_visible (not l2 .get_visible ())
597
+
583
598
if self .drawon :
584
599
self .ax .figure .canvas .draw ()
585
600
586
601
if not self .eventson :
587
602
return
588
603
for cid , func in six .iteritems (self .observers ):
589
- func (thist .get_text ())
604
+ func (self . labels [ index ] .get_text ())
590
605
591
606
def on_clicked (self , func ):
592
607
"""
@@ -698,17 +713,31 @@ def inside(p):
698
713
pcirc = np .array ([p .center [0 ], p .center [1 ]])
699
714
return dist (pclicked , pcirc ) < p .radius
700
715
701
- for p , t in zip (self .circles , self .labels ):
716
+ for i , ( p , t ) in enumerate ( zip (self .circles , self .labels ) ):
702
717
if t .get_window_extent ().contains (event .x , event .y ) or inside (p ):
703
- inp = p
704
- thist = t
705
- self .value_selected = t .get_text ()
718
+ self .set_active (i )
706
719
break
707
720
else :
708
721
return
709
722
710
- for p in self .circles :
711
- if p == inp :
723
+ def set_active (self , index ):
724
+ """
725
+ Trigger which radio button to make active.
726
+
727
+ *index* is an index into the original label list
728
+ that this object was constructed with.
729
+ Raise ValueError if the index is invalid.
730
+
731
+ Callbacks will be triggered if :attr:`eventson` is True.
732
+
733
+ """
734
+ if 0 > index >= len (self .labels ):
735
+ raise ValueError ("Invalid RadioButton index: %d" % index )
736
+
737
+ self .value_selected = self .labels [index ].get_text ()
738
+
739
+ for i , p in enumerate (self .circles ):
740
+ if i == index :
712
741
color = self .activecolor
713
742
else :
714
743
color = self .ax .get_axis_bgcolor ()
@@ -720,7 +749,7 @@ def inside(p):
720
749
if not self .eventson :
721
750
return
722
751
for cid , func in six .iteritems (self .observers ):
723
- func (thist .get_text ())
752
+ func (self . labels [ index ] .get_text ())
724
753
725
754
def on_clicked (self , func ):
726
755
"""
0 commit comments