Skip to content

Commit 002ddba

Browse files
committed
Delay-load keymaps in toolmanager.
No test, because toolmanager is currenly only defined for interactive backends, and it's not worth checking whether we can set up a tk canvas or not just for that...
1 parent b09aad2 commit 002ddba

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(ToolToggleBase):
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 enable(self, event):
438440
self.figure.canvas.manager.full_screen_toggle()
@@ -462,7 +464,7 @@ class ToolYScale(AxisScaleBase):
462464
"""Tool to toggle between linear and logarithmic scales on the Y axis."""
463465

464466
description = 'Toggle scale Y axis'
465-
default_keymap = mpl.rcParams['keymap.yscale']
467+
default_keymap = property(lambda self: mpl.rcParams['keymap.yscale'])
466468

467469
def set_scale(self, ax, scale):
468470
ax.set_yscale(scale)
@@ -472,7 +474,7 @@ class ToolXScale(AxisScaleBase):
472474
"""Tool to toggle between linear and logarithmic scales on the X axis."""
473475

474476
description = 'Toggle scale X axis'
475-
default_keymap = mpl.rcParams['keymap.xscale']
477+
default_keymap = property(lambda self: mpl.rcParams['keymap.xscale'])
476478

477479
def set_scale(self, ax, scale):
478480
ax.set_xscale(scale)
@@ -626,7 +628,7 @@ class ToolHome(ViewsPositionsBase):
626628

627629
description = 'Reset original view'
628630
image = 'home'
629-
default_keymap = mpl.rcParams['keymap.home']
631+
default_keymap = property(lambda self: mpl.rcParams['keymap.home'])
630632
_on_trigger = 'home'
631633

632634

@@ -635,7 +637,7 @@ class ToolBack(ViewsPositionsBase):
635637

636638
description = 'Back to previous view'
637639
image = 'back'
638-
default_keymap = mpl.rcParams['keymap.back']
640+
default_keymap = property(lambda self: mpl.rcParams['keymap.back'])
639641
_on_trigger = 'back'
640642

641643

@@ -644,7 +646,7 @@ class ToolForward(ViewsPositionsBase):
644646

645647
description = 'Forward to next view'
646648
image = 'forward'
647-
default_keymap = mpl.rcParams['keymap.forward']
649+
default_keymap = property(lambda self: mpl.rcParams['keymap.forward'])
648650
_on_trigger = 'forward'
649651

650652

@@ -660,7 +662,7 @@ class SaveFigureBase(ToolBase):
660662

661663
description = 'Save the figure'
662664
image = 'filesave'
663-
default_keymap = mpl.rcParams['keymap.save']
665+
default_keymap = property(lambda self: mpl.rcParams['keymap.save'])
664666

665667

666668
class ZoomPanBase(ToolToggleBase):
@@ -735,7 +737,7 @@ class ToolZoom(ZoomPanBase):
735737

736738
description = 'Zoom to rectangle'
737739
image = 'zoom_to_rect'
738-
default_keymap = mpl.rcParams['keymap.zoom']
740+
default_keymap = property(lambda self: mpl.rcParams['keymap.zoom'])
739741
cursor = cursors.SELECT_REGION
740742
radio_group = 'default'
741743

@@ -859,7 +861,7 @@ def _release(self, event):
859861
class ToolPan(ZoomPanBase):
860862
"""Pan axes with left mouse, zoom with right."""
861863

862-
default_keymap = mpl.rcParams['keymap.pan']
864+
default_keymap = property(lambda self: mpl.rcParams['keymap.pan'])
863865
description = 'Pan axes with left mouse, zoom with right'
864866
image = 'move'
865867
cursor = cursors.MOVE
@@ -924,7 +926,7 @@ def _mouse_move(self, event):
924926

925927
class ToolHelpBase(ToolBase):
926928
description = 'Print tool list, shortcuts and description'
927-
default_keymap = mpl.rcParams['keymap.help']
929+
default_keymap = property(lambda self: mpl.rcParams['keymap.help'])
928930
image = 'help'
929931

930932
@staticmethod
@@ -964,7 +966,7 @@ class ToolCopyToClipboardBase(ToolBase):
964966
"""Tool to copy the figure to the clipboard."""
965967

966968
description = 'Copy the canvas figure to clipboard'
967-
default_keymap = mpl.rcParams['keymap.copy']
969+
default_keymap = property(lambda self: mpl.rcParams['keymap.copy'])
968970

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

0 commit comments

Comments
 (0)