Skip to content

Commit 67aee6c

Browse files
authored
Merge pull request matplotlib#28171 from anntzer/rt
Support removing absent tools from ToolContainerBase.
2 parents 9387431 + 3d0f153 commit 67aee6c

File tree

6 files changed

+11
-20
lines changed

6 files changed

+11
-20
lines changed

lib/matplotlib/backend_bases.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3459,6 +3459,10 @@ def remove_toolitem(self, name):
34593459
backend-specific code to remove an element from the toolbar; it is
34603460
called when `.ToolManager` emits a `tool_removed_event`.
34613461
3462+
Because some tools are present only on the `.ToolManager` but not on
3463+
the `ToolContainer`, this method must be a no-op when called on a tool
3464+
absent from the container.
3465+
34623466
.. warning::
34633467
This is part of the backend implementation and should
34643468
not be called by end-users. They should instead call

lib/matplotlib/backends/_backend_tk.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1011,9 +1011,8 @@ def toggle_toolitem(self, name, toggled):
10111011
toolitem.deselect()
10121012

10131013
def remove_toolitem(self, name):
1014-
for toolitem in self._toolitems[name]:
1014+
for toolitem in self._toolitems.pop(name, []):
10151015
toolitem.pack_forget()
1016-
del self._toolitems[name]
10171016

10181017
def set_message(self, s):
10191018
self._message.set(s)

lib/matplotlib/backends/backend_gtk3.py

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -446,15 +446,10 @@ def toggle_toolitem(self, name, toggled):
446446
toolitem.handler_unblock(signal)
447447

448448
def remove_toolitem(self, name):
449-
if name not in self._toolitems:
450-
self.toolmanager.message_event(f'{name} not in toolbar', self)
451-
return
452-
453-
for group in self._groups:
454-
for toolitem, _signal in self._toolitems[name]:
449+
for toolitem, _signal in self._toolitems.pop(name, []):
450+
for group in self._groups:
455451
if toolitem in self._groups[group]:
456452
self._groups[group].remove(toolitem)
457-
del self._toolitems[name]
458453

459454
def _add_separator(self):
460455
sep = Gtk.Separator()

lib/matplotlib/backends/backend_gtk4.py

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -475,15 +475,10 @@ def toggle_toolitem(self, name, toggled):
475475
toolitem.handler_unblock(signal)
476476

477477
def remove_toolitem(self, name):
478-
if name not in self._toolitems:
479-
self.toolmanager.message_event(f'{name} not in toolbar', self)
480-
return
481-
482-
for group in self._groups:
483-
for toolitem, _signal in self._toolitems[name]:
478+
for toolitem, _signal in self._toolitems.pop(name, []):
479+
for group in self._groups:
484480
if toolitem in self._groups[group]:
485481
self._groups[group].remove(toolitem)
486-
del self._toolitems[name]
487482

488483
def _add_separator(self):
489484
sep = Gtk.Separator()

lib/matplotlib/backends/backend_qt.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1007,9 +1007,8 @@ def toggle_toolitem(self, name, toggled):
10071007
button.toggled.connect(handler)
10081008

10091009
def remove_toolitem(self, name):
1010-
for button, handler in self._toolitems[name]:
1010+
for button, handler in self._toolitems.pop(name, []):
10111011
button.setParent(None)
1012-
del self._toolitems[name]
10131012

10141013
def set_message(self, s):
10151014
self.widgetForAction(self._message_action).setText(s)

lib/matplotlib/backends/backend_wx.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1257,9 +1257,8 @@ def toggle_toolitem(self, name, toggled):
12571257
self.Refresh()
12581258

12591259
def remove_toolitem(self, name):
1260-
for tool, handler in self._toolitems[name]:
1260+
for tool, handler in self._toolitems.pop(name, []):
12611261
self.DeleteTool(tool.Id)
1262-
del self._toolitems[name]
12631262

12641263
def set_message(self, s):
12651264
self._label_text.SetLabel(s)

0 commit comments

Comments
 (0)