diff --git a/lib/matplotlib/backend_bases.py b/lib/matplotlib/backend_bases.py index dcf3e7f02e04..85d8032594b2 100644 --- a/lib/matplotlib/backend_bases.py +++ b/lib/matplotlib/backend_bases.py @@ -2777,6 +2777,10 @@ class _Mode(str, Enum): def __str__(self): return self.value + @property + def _navigate_mode(self): + return self.name if self is not _Mode.NONE else None + class NavigationToolbar2: """ @@ -3035,7 +3039,7 @@ def pan(self, *args): self.mode = _Mode.PAN self.canvas.widgetlock(self) for a in self.canvas.figure.get_axes(): - a.set_navigate_mode(self.mode) + a.set_navigate_mode(self.mode._navigate_mode) self.set_message(self.mode) def press_pan(self, event): @@ -3105,7 +3109,7 @@ def zoom(self, *args): self.mode = _Mode.ZOOM self.canvas.widgetlock(self) for a in self.canvas.figure.get_axes(): - a.set_navigate_mode(self.mode) + a.set_navigate_mode(self.mode._navigate_mode) self.set_message(self.mode) def press_zoom(self, event): diff --git a/lib/matplotlib/tests/test_backend_bases.py b/lib/matplotlib/tests/test_backend_bases.py index 6407cb94fba7..d8d7f252af1c 100644 --- a/lib/matplotlib/tests/test_backend_bases.py +++ b/lib/matplotlib/tests/test_backend_bases.py @@ -107,9 +107,11 @@ def test_location_event_position(x, y): def test_interactive_zoom(): fig, ax = plt.subplots() ax.set(xscale="logit") + assert ax.get_navigate_mode() is None tb = NavigationToolbar2(fig.canvas) tb.zoom() + assert ax.get_navigate_mode() == 'ZOOM' xlim0 = ax.get_xlim() ylim0 = ax.get_ylim() @@ -143,3 +145,6 @@ def test_interactive_zoom(): # Absolute tolerance much less than original xmin (1e-7). assert ax.get_xlim() == pytest.approx(xlim0, rel=0, abs=1e-10) assert ax.get_ylim() == pytest.approx(ylim0, rel=0, abs=1e-10) + + tb.zoom() + assert ax.get_navigate_mode() is None