Skip to content

Commit 3de2ea6

Browse files
authored
Merge pull request matplotlib#21529 from anntzer/dlktm
Delay-load keymaps in toolmanager.
2 parents 8aefd6f + 002ddba commit 3de2ea6

File tree

2 files changed

+20
-18
lines changed

2 files changed

+20
-18
lines changed

lib/matplotlib/backend_managers.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -267,8 +267,8 @@ def add_tool(self, name, tool, *args, **kwargs):
267267
tool_obj = tool_cls(self, name, *args, **kwargs)
268268
self._tools[name] = tool_obj
269269

270-
if tool_cls.default_keymap is not None:
271-
self.update_keymap(name, tool_cls.default_keymap)
270+
if tool_obj.default_keymap is not None:
271+
self.update_keymap(name, tool_obj.default_keymap)
272272

273273
# For toggle tools init the radio_group in self._toggled
274274
if isinstance(tool_obj, backend_tools.ToolToggleBase):

lib/matplotlib/backend_tools.py

Lines changed: 18 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,9 @@ class ToolBase:
8383
Keymap to associate with this tool.
8484
8585
``list[str]``: List of keys that will trigger this tool when a keypress
86-
event is emitted on ``self.figure.canvas``.
86+
event is emitted on ``self.figure.canvas``. Note that this attribute is
87+
looked up on the instance, and can therefore be a property (this is used
88+
e.g. by the built-in tools to load the rcParams at instantiation time).
8789
"""
8890

8991
description = None
@@ -382,7 +384,7 @@ class ToolQuit(ToolBase):
382384
"""Tool to call the figure manager destroy method."""
383385

384386
description = 'Quit the figure'
385-
default_keymap = mpl.rcParams['keymap.quit']
387+
default_keymap = property(lambda self: mpl.rcParams['keymap.quit'])
386388

387389
def trigger(self, sender, event, data=None):
388390
Gcf.destroy_fig(self.figure)
@@ -392,7 +394,7 @@ class ToolQuitAll(ToolBase):
392394
"""Tool to call the figure manager destroy method."""
393395

394396
description = 'Quit all figures'
395-
default_keymap = mpl.rcParams['keymap.quit_all']
397+
default_keymap = property(lambda self: mpl.rcParams['keymap.quit_all'])
396398

397399
def trigger(self, sender, event, data=None):
398400
Gcf.destroy_all()
@@ -402,7 +404,7 @@ class ToolGrid(ToolBase):
402404
"""Tool to toggle the major grids of the figure."""
403405

404406
description = 'Toggle major grids'
405-
default_keymap = mpl.rcParams['keymap.grid']
407+
default_keymap = property(lambda self: mpl.rcParams['keymap.grid'])
406408

407409
def trigger(self, sender, event, data=None):
408410
sentinel = str(uuid.uuid4())
@@ -417,7 +419,7 @@ class ToolMinorGrid(ToolBase):
417419
"""Tool to toggle the major and minor grids of the figure."""
418420

419421
description = 'Toggle major and minor grids'
420-
default_keymap = mpl.rcParams['keymap.grid_minor']
422+
default_keymap = property(lambda self: mpl.rcParams['keymap.grid_minor'])
421423

422424
def trigger(self, sender, event, data=None):
423425
sentinel = str(uuid.uuid4())
@@ -432,7 +434,7 @@ class ToolFullScreen(ToolBase):
432434
"""Tool to toggle full screen."""
433435

434436
description = 'Toggle fullscreen mode'
435-
default_keymap = mpl.rcParams['keymap.fullscreen']
437+
default_keymap = property(lambda self: mpl.rcParams['keymap.fullscreen'])
436438

437439
def trigger(self, sender, event, data=None):
438440
self.figure.canvas.manager.full_screen_toggle()
@@ -459,7 +461,7 @@ class ToolYScale(AxisScaleBase):
459461
"""Tool to toggle between linear and logarithmic scales on the Y axis."""
460462

461463
description = 'Toggle scale Y axis'
462-
default_keymap = mpl.rcParams['keymap.yscale']
464+
default_keymap = property(lambda self: mpl.rcParams['keymap.yscale'])
463465

464466
def set_scale(self, ax, scale):
465467
ax.set_yscale(scale)
@@ -469,7 +471,7 @@ class ToolXScale(AxisScaleBase):
469471
"""Tool to toggle between linear and logarithmic scales on the X axis."""
470472

471473
description = 'Toggle scale X axis'
472-
default_keymap = mpl.rcParams['keymap.xscale']
474+
default_keymap = property(lambda self: mpl.rcParams['keymap.xscale'])
473475

474476
def set_scale(self, ax, scale):
475477
ax.set_xscale(scale)
@@ -623,7 +625,7 @@ class ToolHome(ViewsPositionsBase):
623625

624626
description = 'Reset original view'
625627
image = 'home'
626-
default_keymap = mpl.rcParams['keymap.home']
628+
default_keymap = property(lambda self: mpl.rcParams['keymap.home'])
627629
_on_trigger = 'home'
628630

629631

@@ -632,7 +634,7 @@ class ToolBack(ViewsPositionsBase):
632634

633635
description = 'Back to previous view'
634636
image = 'back'
635-
default_keymap = mpl.rcParams['keymap.back']
637+
default_keymap = property(lambda self: mpl.rcParams['keymap.back'])
636638
_on_trigger = 'back'
637639

638640

@@ -641,7 +643,7 @@ class ToolForward(ViewsPositionsBase):
641643

642644
description = 'Forward to next view'
643645
image = 'forward'
644-
default_keymap = mpl.rcParams['keymap.forward']
646+
default_keymap = property(lambda self: mpl.rcParams['keymap.forward'])
645647
_on_trigger = 'forward'
646648

647649

@@ -657,7 +659,7 @@ class SaveFigureBase(ToolBase):
657659

658660
description = 'Save the figure'
659661
image = 'filesave'
660-
default_keymap = mpl.rcParams['keymap.save']
662+
default_keymap = property(lambda self: mpl.rcParams['keymap.save'])
661663

662664

663665
class ZoomPanBase(ToolToggleBase):
@@ -732,7 +734,7 @@ class ToolZoom(ZoomPanBase):
732734

733735
description = 'Zoom to rectangle'
734736
image = 'zoom_to_rect'
735-
default_keymap = mpl.rcParams['keymap.zoom']
737+
default_keymap = property(lambda self: mpl.rcParams['keymap.zoom'])
736738
cursor = cursors.SELECT_REGION
737739
radio_group = 'default'
738740

@@ -856,7 +858,7 @@ def _release(self, event):
856858
class ToolPan(ZoomPanBase):
857859
"""Pan axes with left mouse, zoom with right."""
858860

859-
default_keymap = mpl.rcParams['keymap.pan']
861+
default_keymap = property(lambda self: mpl.rcParams['keymap.pan'])
860862
description = 'Pan axes with left mouse, zoom with right'
861863
image = 'move'
862864
cursor = cursors.MOVE
@@ -921,7 +923,7 @@ def _mouse_move(self, event):
921923

922924
class ToolHelpBase(ToolBase):
923925
description = 'Print tool list, shortcuts and description'
924-
default_keymap = mpl.rcParams['keymap.help']
926+
default_keymap = property(lambda self: mpl.rcParams['keymap.help'])
925927
image = 'help'
926928

927929
@staticmethod
@@ -961,7 +963,7 @@ class ToolCopyToClipboardBase(ToolBase):
961963
"""Tool to copy the figure to the clipboard."""
962964

963965
description = 'Copy the canvas figure to clipboard'
964-
default_keymap = mpl.rcParams['keymap.copy']
966+
default_keymap = property(lambda self: mpl.rcParams['keymap.copy'])
965967

966968
def trigger(self, *args, **kwargs):
967969
message = "Copy tool is not available"

0 commit comments

Comments
 (0)