Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 21bca27

Browse files
committed
Add connect_event and disconnect_events to AxesWidget.
1 parent e37c135 commit 21bca27

File tree

1 file changed

+36
-31
lines changed

1 file changed

+36
-31
lines changed

lib/matplotlib/widgets.py

Lines changed: 36 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -55,14 +55,14 @@ def locked(self):
5555
return self._owner is not None
5656

5757

58-
5958
class Widget(object):
6059
"""
6160
Abstract base class for GUI neutral widgets
6261
"""
6362
drawon = True
6463
eventson = True
6564

65+
6666
class AxesWidget(Widget):
6767
"""
6868
Widget that is connected to a single :class:`Axes`.
@@ -77,6 +77,15 @@ class AxesWidget(Widget):
7777
def __init__(self, ax):
7878
self.ax = ax
7979
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)
8089

8190

8291
class Button(AxesWidget):
@@ -133,9 +142,9 @@ def __init__(self, ax, label, image=None,
133142
self.cnt = 0
134143
self.observers = {}
135144

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)
139148
ax.set_navigate(False)
140149
ax.set_axis_bgcolor(color)
141150
ax.set_xticks([])
@@ -270,10 +279,10 @@ def __init__(self, ax, label, valmin, valmax, valinit=0.5, valfmt='%1.2f',
270279
ax.set_xticks([])
271280
ax.set_navigate(False)
272281

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)
275284
if dragging:
276-
ax.figure.canvas.mpl_connect('motion_notify_event', self._update)
285+
self.connect_event('motion_notify_event', self._update)
277286
self.label = ax.text(-0.02, 0.5, label, transform=ax.transAxes,
278287
verticalalignment='center',
279288
horizontalalignment='right')
@@ -446,7 +455,7 @@ def __init__(self, ax, labels, actives):
446455
ax.add_line(l2)
447456
cnt += 1
448457

449-
ax.figure.canvas.mpl_connect('button_press_event', self._clicked)
458+
self.connect_event('button_press_event', self._clicked)
450459

451460
self.cnt = 0
452461
self.observers = {}
@@ -557,7 +566,7 @@ def __init__(self, ax, labels, active=0, activecolor='blue'):
557566
ax.add_patch(p)
558567
cnt += 1
559568

560-
ax.figure.canvas.mpl_connect('button_press_event', self._clicked)
569+
self.connect_event('button_press_event', self._clicked)
561570

562571
self.cnt = 0
563572
self.observers = {}
@@ -770,8 +779,8 @@ def __init__(self, ax, useblit=False, **lineprops):
770779
# TODO: Is the GTKAgg limitation still true?
771780
AxesWidget.__init__(self, ax)
772781

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)
775784

776785
self.visible = True
777786
self.horizOn = True
@@ -951,7 +960,6 @@ def __init__(self, ax, onselect, direction, minspan=None, useblit=False,
951960
self.direction = direction
952961

953962
self.visible = True
954-
self.cids=[]
955963

956964
self.rect = None
957965
self.background = None
@@ -967,10 +975,10 @@ def __init__(self, ax, onselect, direction, minspan=None, useblit=False,
967975
self.buttonDown = False
968976
self.prev = (0, 0)
969977

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)
974982

975983
if self.direction == 'horizontal':
976984
trans = blended_transform_factory(self.ax.transData, self.ax.transAxes)
@@ -989,15 +997,14 @@ def __init__(self, ax, onselect, direction, minspan=None, useblit=False,
989997
def new_axes(self,ax):
990998
self.ax = ax
991999
if self.canvas is not ax.figure.canvas:
992-
for cid in self.cids:
993-
self.canvas.mpl_disconnect(cid)
1000+
self.disconnect_events()
9941001

9951002
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)
9961007

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))
10011008
if self.direction == 'horizontal':
10021009
trans = blended_transform_factory(self.ax.transData, self.ax.transAxes)
10031010
w,h = 0,1
@@ -1193,10 +1200,10 @@ def __init__(self, ax, onselect, drawtype='box',
11931200
AxesWidget.__init__(self, ax)
11941201

11951202
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)
12001207

12011208
self.active = True # for activation / deactivation
12021209
self.to_draw = None
@@ -1400,9 +1407,8 @@ def __init__(self, ax, xy, callback=None, useblit=True):
14001407
self.line = Line2D([x], [y], linestyle='-', color='black', lw=2)
14011408
self.ax.add_line(self.line)
14021409
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)
14061412

14071413
def onrelease(self, event):
14081414
if self.verts is not None:
@@ -1411,8 +1417,7 @@ def onrelease(self, event):
14111417
self.callback(self.verts)
14121418
self.ax.lines.remove(self.line)
14131419
self.verts = None
1414-
for cid in self.cids:
1415-
self.canvas.mpl_disconnect(cid)
1420+
self.disconnect_events()
14161421

14171422
def onmove(self, event):
14181423
if self.verts is None: return

0 commit comments

Comments
 (0)