Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit 3b9ce34

Browse filesBrowse 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
Copy full SHA for 3b9ce34

File tree

Expand file treeCollapse file tree

3 files changed

+34
-15
lines changed
Filter options
Expand file treeCollapse file tree

3 files changed

+34
-15
lines changed
+7Lines 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

Copy file name to clipboardExpand all lines: examples/user_interfaces/embedding_in_tk_sgskip.py
+3-6Lines 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

Copy file name to clipboardExpand all lines: lib/matplotlib/backend_bases.py
+24-9Lines 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 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.