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

Skip to content

Commit 6414315

Browse files
authored
Merge pull request #19644 from meeseeksmachine/auto-backport-of-pr-19611-on-v3.4.x
Backport PR #19611 on branch v3.4.x (Fix double picks.)
2 parents 84b9a88 + 5c536dc commit 6414315

File tree

3 files changed

+20
-5
lines changed

3 files changed

+20
-5
lines changed

lib/matplotlib/backend_bases.py

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1726,15 +1726,13 @@ def __init__(self, figure=None):
17261726
self._button = None # the button pressed
17271727
self._key = None # the key pressed
17281728
self._lastx, self._lasty = None, None
1729-
self.button_pick_id = self.mpl_connect('button_press_event', self.pick)
1730-
self.scroll_pick_id = self.mpl_connect('scroll_event', self.pick)
17311729
self.mouse_grabber = None # the axes currently grabbing mouse
17321730
self.toolbar = None # NavigationToolbar2 will set me
17331731
self._is_idle_drawing = False
17341732

1735-
@property
1736-
def callbacks(self):
1737-
return self.figure._canvas_callbacks
1733+
callbacks = property(lambda self: self.figure._canvas_callbacks)
1734+
button_pick_id = property(lambda self: self.figure._button_pick_id)
1735+
scroll_pick_id = property(lambda self: self.figure._scroll_pick_id)
17381736

17391737
@classmethod
17401738
@functools.lru_cache()

lib/matplotlib/figure.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2111,6 +2111,10 @@ def __init__(self,
21112111
# a proxy property), but that actually need to be on the figure for
21122112
# pickling.
21132113
self._canvas_callbacks = cbook.CallbackRegistry()
2114+
self._button_pick_id = self._canvas_callbacks.connect(
2115+
'button_press_event', lambda event: self.canvas.pick(event))
2116+
self._scroll_pick_id = self._canvas_callbacks.connect(
2117+
'scroll_event', lambda event: self.canvas.pick(event))
21142118

21152119
if figsize is None:
21162120
figsize = mpl.rcParams['figure.figsize']

lib/matplotlib/tests/test_backend_bases.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,19 @@ def test_location_event_position(x, y):
120120
assert re.match("x=foo +y=foo", ax.format_coord(x, y))
121121

122122

123+
def test_pick():
124+
fig = plt.figure()
125+
fig.text(.5, .5, "hello", ha="center", va="center", picker=True)
126+
fig.canvas.draw()
127+
picks = []
128+
fig.canvas.mpl_connect("pick_event", lambda event: picks.append(event))
129+
start_event = MouseEvent(
130+
"button_press_event", fig.canvas, *fig.transFigure.transform((.5, .5)),
131+
MouseButton.LEFT)
132+
fig.canvas.callbacks.process(start_event.name, start_event)
133+
assert len(picks) == 1
134+
135+
123136
def test_interactive_zoom():
124137
fig, ax = plt.subplots()
125138
ax.set(xscale="logit")

0 commit comments

Comments
 (0)