diff --git a/lib/matplotlib/backend_bases.py b/lib/matplotlib/backend_bases.py index 920317a891a2..9f6f9f364433 100644 --- a/lib/matplotlib/backend_bases.py +++ b/lib/matplotlib/backend_bases.py @@ -3365,7 +3365,7 @@ def remove_tool(self, name): Name of the Tool """ - tool = self._tools[name] + tool = self.get_tool(name) tool.destroy() # If is a toggle tool and toggled, untoggle @@ -3516,8 +3516,8 @@ def tool_trigger_event(self, name, sender=None, canvasevent=None, data : Object Extra data to pass to the tool when triggering """ - if name not in self._tools: - warnings.warn("%s is not a tool controlled by Navigation" % name) + tool = self.get_tool(name) + if tool is None: return if sender is None: @@ -3526,8 +3526,7 @@ def tool_trigger_event(self, name, sender=None, canvasevent=None, self._trigger_tool(name, sender, canvasevent, data) s = 'tool_trigger_%s' % name - event = ToolTriggerEvent(s, sender, self._tools[name], canvasevent, - data) + event = ToolTriggerEvent(s, sender, tool, canvasevent, data) self._callbacks.process(s, event) def _trigger_tool(self, name, sender=None, canvasevent=None, data=None): @@ -3535,7 +3534,7 @@ def _trigger_tool(self, name, sender=None, canvasevent=None, data=None): Method to actually trigger the tool """ - tool = self._tools[name] + tool = self.get_tool(name) if isinstance(tool, tools.ToolToggleBase): self._handle_toggle(tool, sender, canvasevent, data) @@ -3560,13 +3559,18 @@ def tools(self): return self._tools def get_tool(self, name): - """Return the tool object + """Return the tool object, also accepts the actual tool for convenience Parameters ----------- - name : String - Name of the tool + name : String, ToolBase + Name of the tool, or the tool itself """ + if isinstance(name, tools.ToolBase): + return name + if name not in self._tools: + warnings.warn("%s is not a tool controlled by Navigation" % name) + return None return self._tools[name]