Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit f2b870e

Browse files
committed
FIX: check we have a back button in tk toolbar before we touch it
We add one by default, but sub-classes may remove it. closes #18232
1 parent 4e11730 commit f2b870e

2 files changed

Lines changed: 22 additions & 8 deletions

File tree

lib/matplotlib/backends/_backend_tk.py

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -635,14 +635,15 @@ def save_figure(self, *args):
635635
tkinter.messagebox.showerror("Error saving file", str(e))
636636

637637
def set_history_buttons(self):
638-
if self._nav_stack._pos > 0:
639-
self._buttons['Back']['state'] = tk.NORMAL
640-
else:
641-
self._buttons['Back']['state'] = tk.DISABLED
642-
if self._nav_stack._pos < len(self._nav_stack._elements) - 1:
643-
self._buttons['Forward']['state'] = tk.NORMAL
644-
else:
645-
self._buttons['Forward']['state'] = tk.DISABLED
638+
state_map = {True: tk.NORMAL, False: tk.DISABLED}
639+
can_back = self._nav_stack._pos > 0
640+
can_forward = self._nav_stack._pos < len(self._nav_stack._elements) - 1
641+
642+
if "Back" in self._buttons:
643+
self._buttons['Back']['state'] = state_map[can_back]
644+
645+
if "Forward" in self._buttons:
646+
self._buttons['Forward']['state'] = state_map[can_forward]
646647

647648

648649
class ToolTip:

lib/matplotlib/tests/test_backend_tk.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,3 +100,16 @@ def target():
100100
except subprocess.CalledProcessError:
101101
pytest.fail("Subprocess failed to test intended behavior")
102102
assert proc.stdout.count("success") == 1
103+
104+
105+
@pytest.mark.backend('TkAgg', skip_on_importerror=True)
106+
def test_missing_back_button():
107+
from matplotlib.backends.backend_tkagg import NavigationToolbar2Tk
108+
class Toolbar(NavigationToolbar2Tk):
109+
# only display the buttons we need
110+
toolitems = [t for t in NavigationToolbar2Tk.toolitems if
111+
t[0] in ('Home', 'Pan', 'Zoom')]
112+
113+
fig = plt.figure()
114+
# this should not raise
115+
Toolbar(fig.canvas, fig.canvas.manager.window)

0 commit comments

Comments
 (0)