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

Skip to content

Commit 3b9ce34

Browse files
authored
Merge pull request #17110 from anntzer/default_handlers
Simplify connection of the default key_press and button_press handlers.
2 parents 0ba2b40 + 3e66047 commit 3b9ce34

File tree

3 files changed

+34
-15
lines changed

3 files changed

+34
-15
lines changed
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
`.backend_bases.key_press_handler` and `.backend_bases.button_press_handler` simplifications
2+
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
3+
These event handlers can now be directly connected to a canvas with
4+
``canvas.mpl_connect("key_press_event", key_press_handler)`` and
5+
``canvas.mpl_connect("button_press_event", button_press_handler)``, rather than
6+
having to write wrapper functions that fill in the (now optional) *canvas* and
7+
*toolbar* parameters.

examples/user_interfaces/embedding_in_tk_sgskip.py

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -31,12 +31,9 @@
3131
toolbar.update()
3232

3333

34-
def on_key_press(event):
35-
print("you pressed {}".format(event.key))
36-
key_press_handler(event, canvas, toolbar)
37-
38-
39-
canvas.mpl_connect("key_press_event", on_key_press)
34+
canvas.mpl_connect(
35+
"key_press_event", lambda event: print(f"you pressed {event.key}"))
36+
canvas.mpl_connect("key_press_event", key_press_handler)
4037

4138
button = tkinter.Button(master=root, text="Quit", command=root.quit)
4239

lib/matplotlib/backend_bases.py

Lines changed: 24 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2306,24 +2306,32 @@ def stop_event_loop(self):
23062306
self._looping = False
23072307

23082308

2309-
def key_press_handler(event, canvas, toolbar=None):
2309+
def key_press_handler(event, canvas=None, toolbar=None):
23102310
"""
23112311
Implement the default Matplotlib key bindings for the canvas and toolbar
23122312
described at :ref:`key-event-handling`.
23132313
23142314
Parameters
23152315
----------
23162316
event : `KeyEvent`
2317-
a key press/release event
2318-
canvas : `FigureCanvasBase`
2319-
the backend-specific canvas instance
2320-
toolbar : `NavigationToolbar2`
2321-
the navigation cursor toolbar
2317+
A key press/release event.
2318+
canvas : `FigureCanvasBase`, optional, default: ``event.canvas``
2319+
The backend-specific canvas instance. This parameter is kept for
2320+
back-compatibility, but, if set, should always be equal to
2321+
``event.canvas``.
2322+
toolbar : `NavigationToolbar2`, optional, default: ``event.canvas.toolbar``
2323+
The navigation cursor toolbar. This parameter is kept for
2324+
back-compatibility, but, if set, should always be equal to
2325+
``event.canvas.toolbar``.
23222326
"""
23232327
# these bindings happen whether you are over an axes or not
23242328

23252329
if event.key is None:
23262330
return
2331+
if canvas is None:
2332+
canvas = event.canvas
2333+
if toolbar is None:
2334+
toolbar = canvas.toolbar
23272335

23282336
# Load key-mappings from rcParams.
23292337
fullscreen_keys = rcParams['keymap.fullscreen']
@@ -2483,10 +2491,17 @@ def _get_uniform_gridstate(ticks):
24832491
a.set_navigate(i == n)
24842492

24852493

2486-
def button_press_handler(event, canvas, toolbar=None):
2494+
def button_press_handler(event, canvas=None, toolbar=None):
24872495
"""
24882496
The default Matplotlib button actions for extra mouse buttons.
2497+
2498+
Parameters are as for `key_press_handler`, except that *event* is a
2499+
`MouseEvent`.
24892500
"""
2501+
if canvas is None:
2502+
canvas = event.canvas
2503+
if toolbar is None:
2504+
toolbar = canvas.toolbar
24902505
if toolbar is not None:
24912506
button_name = str(MouseButton(event.button))
24922507
if button_name in rcParams['keymap.back']:
@@ -2610,12 +2625,12 @@ def key_press(self, event):
26102625
:ref:`key-event-handling`.
26112626
"""
26122627
if rcParams['toolbar'] != 'toolmanager':
2613-
key_press_handler(event, self.canvas, self.canvas.toolbar)
2628+
key_press_handler(event)
26142629

26152630
def button_press(self, event):
26162631
"""The default Matplotlib button actions for extra mouse buttons."""
26172632
if rcParams['toolbar'] != 'toolmanager':
2618-
button_press_handler(event, self.canvas, self.canvas.toolbar)
2633+
button_press_handler(event)
26192634

26202635
def get_window_title(self):
26212636
"""

0 commit comments

Comments
 (0)