@@ -55,14 +55,14 @@ def locked(self):
55
55
return self ._owner is not None
56
56
57
57
58
-
59
58
class Widget (object ):
60
59
"""
61
60
Abstract base class for GUI neutral widgets
62
61
"""
63
62
drawon = True
64
63
eventson = True
65
64
65
+
66
66
class AxesWidget (Widget ):
67
67
"""
68
68
Widget that is connected to a single :class:`Axes`.
@@ -77,6 +77,15 @@ class AxesWidget(Widget):
77
77
def __init__ (self , ax ):
78
78
self .ax = ax
79
79
self .canvas = ax .figure .canvas
80
+ self .cids = []
81
+
82
+ def connect_event (self , event , callback ):
83
+ self .canvas .mpl_connect (event , callback )
84
+ self .cids .append (callback )
85
+
86
+ def disconnect_events (self ):
87
+ for c in self .cids :
88
+ self .canvas .mpl_disconnect (c )
80
89
81
90
82
91
class Button (AxesWidget ):
@@ -133,9 +142,9 @@ def __init__(self, ax, label, image=None,
133
142
self .cnt = 0
134
143
self .observers = {}
135
144
136
- ax . figure . canvas . mpl_connect ('button_press_event' , self ._click )
137
- ax . figure . canvas . mpl_connect ('button_release_event' , self ._release )
138
- ax . figure . canvas . mpl_connect ('motion_notify_event' , self ._motion )
145
+ self . connect_event ('button_press_event' , self ._click )
146
+ self . connect_event ('button_release_event' , self ._release )
147
+ self . connect_event ('motion_notify_event' , self ._motion )
139
148
ax .set_navigate (False )
140
149
ax .set_axis_bgcolor (color )
141
150
ax .set_xticks ([])
@@ -270,10 +279,10 @@ def __init__(self, ax, label, valmin, valmax, valinit=0.5, valfmt='%1.2f',
270
279
ax .set_xticks ([])
271
280
ax .set_navigate (False )
272
281
273
- ax . figure . canvas . mpl_connect ('button_press_event' , self ._update )
274
- ax . figure . canvas . mpl_connect ('button_release_event' , self ._update )
282
+ self . connect_event ('button_press_event' , self ._update )
283
+ self . connect_event ('button_release_event' , self ._update )
275
284
if dragging :
276
- ax . figure . canvas . mpl_connect ('motion_notify_event' , self ._update )
285
+ self . connect_event ('motion_notify_event' , self ._update )
277
286
self .label = ax .text (- 0.02 , 0.5 , label , transform = ax .transAxes ,
278
287
verticalalignment = 'center' ,
279
288
horizontalalignment = 'right' )
@@ -446,7 +455,7 @@ def __init__(self, ax, labels, actives):
446
455
ax .add_line (l2 )
447
456
cnt += 1
448
457
449
- ax . figure . canvas . mpl_connect ('button_press_event' , self ._clicked )
458
+ self . connect_event ('button_press_event' , self ._clicked )
450
459
451
460
self .cnt = 0
452
461
self .observers = {}
@@ -557,7 +566,7 @@ def __init__(self, ax, labels, active=0, activecolor='blue'):
557
566
ax .add_patch (p )
558
567
cnt += 1
559
568
560
- ax . figure . canvas . mpl_connect ('button_press_event' , self ._clicked )
569
+ self . connect_event ('button_press_event' , self ._clicked )
561
570
562
571
self .cnt = 0
563
572
self .observers = {}
@@ -770,8 +779,8 @@ def __init__(self, ax, useblit=False, **lineprops):
770
779
# TODO: Is the GTKAgg limitation still true?
771
780
AxesWidget .__init__ (self , ax )
772
781
773
- self .canvas . mpl_connect ('motion_notify_event' , self .onmove )
774
- self .canvas . mpl_connect ('draw_event' , self .clear )
782
+ self .connect_event ('motion_notify_event' , self .onmove )
783
+ self .connect_event ('draw_event' , self .clear )
775
784
776
785
self .visible = True
777
786
self .horizOn = True
@@ -951,7 +960,6 @@ def __init__(self, ax, onselect, direction, minspan=None, useblit=False,
951
960
self .direction = direction
952
961
953
962
self .visible = True
954
- self .cids = []
955
963
956
964
self .rect = None
957
965
self .background = None
@@ -967,10 +975,10 @@ def __init__(self, ax, onselect, direction, minspan=None, useblit=False,
967
975
self .buttonDown = False
968
976
self .prev = (0 , 0 )
969
977
970
- self .cids . append ( self . canvas . mpl_connect ( 'motion_notify_event' , self .onmove ) )
971
- self .cids . append ( self . canvas . mpl_connect ( 'button_press_event' , self .press ) )
972
- self .cids . append ( self . canvas . mpl_connect ( 'button_release_event' , self .release ) )
973
- self .cids . append ( self . canvas . mpl_connect ( 'draw_event' , self .update_background ) )
978
+ self .connect_event ( 'motion_notify_event' , self .onmove )
979
+ self .connect_event ( 'button_press_event' , self .press )
980
+ self .connect_event ( 'button_release_event' , self .release )
981
+ self .connect_event ( 'draw_event' , self .update_background )
974
982
975
983
if self .direction == 'horizontal' :
976
984
trans = blended_transform_factory (self .ax .transData , self .ax .transAxes )
@@ -989,15 +997,14 @@ def __init__(self, ax, onselect, direction, minspan=None, useblit=False,
989
997
def new_axes (self ,ax ):
990
998
self .ax = ax
991
999
if self .canvas is not ax .figure .canvas :
992
- for cid in self .cids :
993
- self .canvas .mpl_disconnect (cid )
1000
+ self .disconnect_events ()
994
1001
995
1002
self .canvas = ax .figure .canvas
1003
+ self .connect_event ('motion_notify_event' , self .onmove )
1004
+ self .connect_event ('button_press_event' , self .press )
1005
+ self .connect_event ('button_release_event' , self .release )
1006
+ self .connect_event ('draw_event' , self .update_background )
996
1007
997
- self .cids .append (self .canvas .mpl_connect ('motion_notify_event' , self .onmove ))
998
- self .cids .append (self .canvas .mpl_connect ('button_press_event' , self .press ))
999
- self .cids .append (self .canvas .mpl_connect ('button_release_event' , self .release ))
1000
- self .cids .append (self .canvas .mpl_connect ('draw_event' , self .update_background ))
1001
1008
if self .direction == 'horizontal' :
1002
1009
trans = blended_transform_factory (self .ax .transData , self .ax .transAxes )
1003
1010
w ,h = 0 ,1
@@ -1193,10 +1200,10 @@ def __init__(self, ax, onselect, drawtype='box',
1193
1200
AxesWidget .__init__ (self , ax )
1194
1201
1195
1202
self .visible = True
1196
- self .canvas . mpl_connect ('motion_notify_event' , self .onmove )
1197
- self .canvas . mpl_connect ('button_press_event' , self .press )
1198
- self .canvas . mpl_connect ('button_release_event' , self .release )
1199
- self .canvas . mpl_connect ('draw_event' , self .update_background )
1203
+ self .connect_event ('motion_notify_event' , self .onmove )
1204
+ self .connect_event ('button_press_event' , self .press )
1205
+ self .connect_event ('button_release_event' , self .release )
1206
+ self .connect_event ('draw_event' , self .update_background )
1200
1207
1201
1208
self .active = True # for activation / deactivation
1202
1209
self .to_draw = None
@@ -1400,9 +1407,8 @@ def __init__(self, ax, xy, callback=None, useblit=True):
1400
1407
self .line = Line2D ([x ], [y ], linestyle = '-' , color = 'black' , lw = 2 )
1401
1408
self .ax .add_line (self .line )
1402
1409
self .callback = callback
1403
- self .cids = []
1404
- self .cids .append (self .canvas .mpl_connect ('button_release_event' , self .onrelease ))
1405
- self .cids .append (self .canvas .mpl_connect ('motion_notify_event' , self .onmove ))
1410
+ self .connect_event ('button_release_event' , self .onrelease )
1411
+ self .connect_event ('motion_notify_event' , self .onmove )
1406
1412
1407
1413
def onrelease (self , event ):
1408
1414
if self .verts is not None :
@@ -1411,8 +1417,7 @@ def onrelease(self, event):
1411
1417
self .callback (self .verts )
1412
1418
self .ax .lines .remove (self .line )
1413
1419
self .verts = None
1414
- for cid in self .cids :
1415
- self .canvas .mpl_disconnect (cid )
1420
+ self .disconnect_events ()
1416
1421
1417
1422
def onmove (self , event ):
1418
1423
if self .verts is None : return
0 commit comments