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

Skip to content

Commit f28d31c

Browse files
committed
Remove private event handling methods to allow for subclassing old api
1 parent 2e99826 commit f28d31c

File tree

2 files changed

+45
-55
lines changed

2 files changed

+45
-55
lines changed

lib/matplotlib/tests/test_widgets.py

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,10 @@
88
import mock
99

1010
import matplotlib.widgets as widgets
11+
12+
import numpy as np
13+
import matplotlib
14+
from matplotlib.testing.decorators import image_comparison, cleanup
1115
import matplotlib.pyplot as plt
1216

1317

@@ -74,13 +78,13 @@ def onselect(epress, erelease):
7478

7579
tool = widgets.RectangleSelector(ax, onselect, **kwargs)
7680
event = get_event(ax, xdata=100, ydata=100, button=1)
77-
tool._press(event)
81+
tool.press(event)
7882

7983
event = get_event(ax, xdata=125, ydata=125, button=1)
80-
tool._onmove(event)
84+
tool.onmove(event)
8185

8286
event = get_event(ax, xdata=150, ydata=150, button=1)
83-
tool._release(event)
87+
tool.release(event)
8488

8589
assert ax._got_onselect
8690

@@ -113,13 +117,13 @@ def onmove(vmin, vmax):
113117

114118
tool = widgets.SpanSelector(ax, onselect, *args, **kwargs)
115119
event = get_event(ax, xdata=100, ydata=100, button=1)
116-
tool._press(event)
120+
tool.press(event)
117121

118122
event = get_event(ax, xdata=125, ydata=125, button=1)
119-
tool._onmove(event)
123+
tool.onmove(event)
120124

121125
event = get_event(ax, xdata=150, ydata=150, button=1)
122-
tool._release(event)
126+
tool.release(event)
123127

124128
assert ax._got_onselect
125129

@@ -139,17 +143,18 @@ def check_lasso_selector(**kwargs):
139143

140144
def onselect(verts):
141145
ax._got_onselect = True
146+
print(verts)
142147
assert verts == [(100, 100), (125, 125), (150, 150)]
143148

144149
tool = widgets.LassoSelector(ax, onselect, **kwargs)
145150
event = get_event(ax, xdata=100, ydata=100, button=1)
146-
tool._press(event)
151+
tool.press(event)
147152

148153
event = get_event(ax, xdata=125, ydata=125, button=1)
149-
tool._onmove(event)
154+
tool.onmove(event)
150155

151156
event = get_event(ax, xdata=150, ydata=150, button=1)
152-
tool._release(event)
157+
tool.release(event)
153158

154159
assert ax._got_onselect
155160

lib/matplotlib/widgets.py

Lines changed: 31 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -1132,12 +1132,12 @@ def update_background(self, event):
11321132

11331133
def connect_default_events(self):
11341134
"""Connect the major canvas events to methods."""
1135-
self.connect_event('motion_notify_event', self._onmove)
1136-
self.connect_event('button_press_event', self._press)
1137-
self.connect_event('button_release_event', self._release)
1135+
self.connect_event('motion_notify_event', self.onmove)
1136+
self.connect_event('button_press_event', self.press)
1137+
self.connect_event('button_release_event', self.release)
11381138
self.connect_event('draw_event', self.update_background)
1139-
self.connect_event('key_press_event', self._on_key_press)
1140-
self.connect_event('scroll_event', self._on_scroll)
1139+
self.connect_event('key_press_event', self.on_key_press)
1140+
self.connect_event('scroll_event', self.on_scroll)
11411141

11421142
def ignore(self, event):
11431143
"""return *True* if *event* should be ignored"""
@@ -1198,64 +1198,36 @@ def update(self):
11981198
self.canvas.draw_idle()
11991199
return False
12001200

1201-
def _press(self, event):
1202-
"""Button press event"""
1203-
if not self.ignore(event):
1204-
self.eventpress = event
1205-
self.press(event)
1206-
12071201
def press(self, event):
12081202
"""Button press handler"""
1209-
pass
1210-
1211-
def _release(self, event):
1212-
if not self.ignore(event) and not self.eventpress is None:
1213-
self.eventrelease = event
1214-
self.release(event)
1215-
self.eventpress = None
1216-
self.eventrelease = None
1203+
if not self.ignore(event):
1204+
self.eventpress = event
1205+
return True
1206+
return False
12171207

12181208
def release(self, event):
12191209
"""Button release event"""
1220-
pass
1221-
1222-
def _onmove(self, event):
1223-
if not self.ignore(event):
1224-
self.onmove(event)
1210+
if not self.ignore(event) and not self.eventpress is None:
1211+
self.eventrelease = event
1212+
return True
1213+
else:
1214+
return False
12251215

12261216
def onmove(self, event):
1227-
"""Cursor motion event"""
1217+
"""Cursor move event"""
12281218
pass
12291219

1230-
def _on_scroll(self, event):
1231-
if not self.ignore(event):
1232-
self.on_scroll(event)
1233-
12341220
def on_scroll(self, event):
12351221
"""Mouse scroll event"""
12361222
pass
12371223

1238-
def _on_key_press(self, event):
1239-
if not self.ignore(event):
1240-
self.on_key_press(event)
1241-
12421224
def on_key_press(self, event):
12431225
"""Key press event"""
12441226
pass
12451227

1246-
def set_active(self, active):
1247-
"""
1248-
Use this to activate / deactivate the Selector
1249-
from your program with an boolean parameter *active*.
1250-
"""
1251-
self.active = active
1252-
1253-
def get_active(self):
1254-
""" Get status of active mode (boolean variable)"""
1255-
return self.active
1256-
12571228
def set_visible(self, visible):
12581229
""" Set the visibility of our artists """
1230+
self.visible = visible
12591231
for artist in self.artists:
12601232
artist.set_visible(visible)
12611233

@@ -1393,6 +1365,8 @@ def ignore(self, event):
13931365

13941366
def press(self, event):
13951367
"""on button press event"""
1368+
if not _SelectorWidget.press(self, event):
1369+
return False
13961370
self.rect.set_visible(self.visible)
13971371
if self.span_stays:
13981372
self.stay_rect.set_visible(False)
@@ -1405,7 +1379,7 @@ def press(self, event):
14051379

14061380
def release(self, event):
14071381
"""on button release event"""
1408-
if self.pressv is None:
1382+
if not _SelectorWidget.release(self, event) or self.pressv is None:
14091383
return
14101384
self.buttonDown = False
14111385

@@ -1467,6 +1441,7 @@ def onmove(self, event):
14671441
self.onmove_callback(vmin, vmax)
14681442

14691443
self.update()
1444+
self.eventpress = None
14701445
return False
14711446

14721447

@@ -1591,12 +1566,17 @@ def __init__(self, ax, onselect, drawtype='box',
15911566

15921567
def press(self, event):
15931568
"""on button press event"""
1569+
if not _SelectorWidget.press(self, event):
1570+
return True
15941571
# make the drawed box/line visible
15951572
self.to_draw.set_visible(self.visible)
15961573
return False
15971574

15981575
def release(self, event):
15991576
"""on button release event"""
1577+
if not _SelectorWidget.release(self, event):
1578+
return True
1579+
16001580
# make the box/line invisible again
16011581
self.to_draw.set_visible(False)
16021582
self.canvas.draw()
@@ -1630,6 +1610,7 @@ def release(self, event):
16301610

16311611
self.onselect(self.eventpress, self.eventrelease)
16321612
# call desired function
1613+
self.eventpress = None
16331614
return False
16341615

16351616
def onmove(self, event):
@@ -1720,13 +1701,17 @@ def onpress(self, event):
17201701
self.press(event)
17211702

17221703
def press(self, event):
1704+
if not _SelectorWidget.press(self, event):
1705+
return
17231706
self.verts = [(event.xdata, event.ydata)]
17241707
self.line.set_visible(True)
17251708

17261709
def onrelease(self, event):
17271710
self.release(event)
17281711

17291712
def release(self, event):
1713+
if not _SelectorWidget.release(self, event):
1714+
return
17301715
if self.verts is not None:
17311716
self.verts.append((event.xdata, event.ydata))
17321717
self.onselect(self.verts)
@@ -1735,7 +1720,7 @@ def release(self, event):
17351720
self.verts = None
17361721

17371722
def onmove(self, event):
1738-
if self.verts is None:
1723+
if self.ignore(event) or self.verts is None:
17391724
return
17401725
self.verts.append((event.xdata, event.ydata))
17411726

0 commit comments

Comments
 (0)