diff --git a/src/napari_matplotlib/base.py b/src/napari_matplotlib/base.py index 4bc15224..52293e4d 100644 --- a/src/napari_matplotlib/base.py +++ b/src/napari_matplotlib/base.py @@ -5,6 +5,9 @@ NavigationToolbar2QT, ) from qtpy.QtWidgets import QVBoxLayout, QWidget +from qtpy.QtGui import QIcon +from pathlib import Path +import os mpl.rc("axes", edgecolor="white") mpl.rc("axes", facecolor="#262930") @@ -15,6 +18,9 @@ mpl.rc("xtick", color="white") mpl.rc("ytick", color="white") +# Icons modified from +# https://github.com/matplotlib/matplotlib/tree/main/lib/matplotlib/mpl-data/images +ICON_ROOT = Path(__file__).parent / "icons" __all__ = ["NapariMPLWidget"] @@ -49,7 +55,8 @@ def __init__(self, napari_viewer: napari.viewer.Viewer): self.canvas = FigureCanvas() self.canvas.figure.set_tight_layout(True) self.canvas.figure.patch.set_facecolor("#262930") - self.toolbar = NavigationToolbar2QT(self.canvas, self) + self.toolbar = NapariNavigationToolbar(self.canvas, self) + self._replace_toolbar_icons() self.setLayout(QVBoxLayout()) self.layout().addWidget(self.toolbar) @@ -113,3 +120,47 @@ def draw(self) -> None: This is a no-op, and is intended for derived classes to override. """ + def _replace_toolbar_icons(self): + # Modify toolbar icons and some tooltips + for action in self.toolbar.actions(): + text = action.text() + if text == "Pan": + action.setToolTip( + "Pan/Zoom: Left button pans; Right button zooms; Click once to activate; Click again to deactivate" + ) + if text == "Zoom": + action.setToolTip( + "Zoom to rectangle; Click once to activate; Click again to deactivate" + ) + if len(text) > 0: # i.e. not a separator item + icon_path = os.path.join(ICON_ROOT, text + ".png") + action.setIcon(QIcon(icon_path)) + + +class NapariNavigationToolbar(NavigationToolbar2QT): + """Custom Toolbar style for Napari.""" + + def __init__(self, canvas, parent): + super().__init__(canvas, parent) + + def _update_buttons_checked(self): + """Update toggle tool icons when selected/unselected.""" + super()._update_buttons_checked() + # changes pan/zoom icons depending on state (checked or not) + if "pan" in self._actions: + if self._actions["pan"].isChecked(): + self._actions["pan"].setIcon( + QIcon(os.path.join(ICON_ROOT, "Pan_checked.png")) + ) + else: + self._actions["pan"].setIcon(QIcon(os.path.join(ICON_ROOT, + "Pan.png"))) + if "zoom" in self._actions: + if self._actions["zoom"].isChecked(): + self._actions["zoom"].setIcon( + QIcon(os.path.join(ICON_ROOT, "Zoom_checked.png")) + ) + else: + self._actions["zoom"].setIcon( + QIcon(os.path.join(ICON_ROOT, "Zoom.png")) + ) diff --git a/src/napari_matplotlib/icons/Back.png b/src/napari_matplotlib/icons/Back.png new file mode 100644 index 00000000..7de13ebf Binary files /dev/null and b/src/napari_matplotlib/icons/Back.png differ diff --git a/src/napari_matplotlib/icons/Customize.png b/src/napari_matplotlib/icons/Customize.png new file mode 100644 index 00000000..dd93590c Binary files /dev/null and b/src/napari_matplotlib/icons/Customize.png differ diff --git a/src/napari_matplotlib/icons/Forward.png b/src/napari_matplotlib/icons/Forward.png new file mode 100644 index 00000000..7340a07b Binary files /dev/null and b/src/napari_matplotlib/icons/Forward.png differ diff --git a/src/napari_matplotlib/icons/Home.png b/src/napari_matplotlib/icons/Home.png new file mode 100644 index 00000000..66def6f3 Binary files /dev/null and b/src/napari_matplotlib/icons/Home.png differ diff --git a/src/napari_matplotlib/icons/Pan.png b/src/napari_matplotlib/icons/Pan.png new file mode 100644 index 00000000..df0a8ed5 Binary files /dev/null and b/src/napari_matplotlib/icons/Pan.png differ diff --git a/src/napari_matplotlib/icons/Pan_checked.png b/src/napari_matplotlib/icons/Pan_checked.png new file mode 100644 index 00000000..0c419ee6 Binary files /dev/null and b/src/napari_matplotlib/icons/Pan_checked.png differ diff --git a/src/napari_matplotlib/icons/Save.png b/src/napari_matplotlib/icons/Save.png new file mode 100644 index 00000000..0094b144 Binary files /dev/null and b/src/napari_matplotlib/icons/Save.png differ diff --git a/src/napari_matplotlib/icons/Subplots.png b/src/napari_matplotlib/icons/Subplots.png new file mode 100644 index 00000000..4064df55 Binary files /dev/null and b/src/napari_matplotlib/icons/Subplots.png differ diff --git a/src/napari_matplotlib/icons/Zoom.png b/src/napari_matplotlib/icons/Zoom.png new file mode 100644 index 00000000..09a98566 Binary files /dev/null and b/src/napari_matplotlib/icons/Zoom.png differ diff --git a/src/napari_matplotlib/icons/Zoom_checked.png b/src/napari_matplotlib/icons/Zoom_checked.png new file mode 100644 index 00000000..9def1df7 Binary files /dev/null and b/src/napari_matplotlib/icons/Zoom_checked.png differ
Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.
Alternative Proxies: