Skip to content

Commit 7aebb99

Browse files
committed
MAINT: Play nicer with themes
1 parent 17d0c87 commit 7aebb99

File tree

2 files changed

+30
-21
lines changed

2 files changed

+30
-21
lines changed

mne/viz/backends/_qt.py

+26-18
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,7 @@
112112
_take_3d_screenshot, # noqa: F401
113113
)
114114
from ._utils import (
115+
_ICONS_PATH,
115116
_init_mne_qtapp,
116117
_qt_app_exec,
117118
_qt_detect_theme,
@@ -276,13 +277,13 @@ def __init__(self, value, callback, icon=None):
276277
self.setText(value)
277278
self.released.connect(callback)
278279
if icon:
279-
self.setIcon(QIcon.fromTheme(icon))
280+
self.setIcon(_qicon(icon))
280281

281282
def _click(self):
282283
self.click()
283284

284285
def _set_icon(self, icon):
285-
self.setIcon(QIcon.fromTheme(icon))
286+
self.setIcon(_qicon(icon))
286287

287288

288289
class _Slider(QSlider, _AbstractSlider, _Widget, metaclass=_BaseWidget):
@@ -474,16 +475,16 @@ def __init__(self, value, rng, callback):
474475
self._slider.valueChanged.connect(callback)
475476
self._nav_hbox = QHBoxLayout()
476477
self._play_button = QPushButton()
477-
self._play_button.setIcon(QIcon.fromTheme("play"))
478+
self._play_button.setIcon(_qicon("play"))
478479
self._nav_hbox.addWidget(self._play_button)
479480
self._pause_button = QPushButton()
480-
self._pause_button.setIcon(QIcon.fromTheme("pause"))
481+
self._pause_button.setIcon(_qicon("pause"))
481482
self._nav_hbox.addWidget(self._pause_button)
482483
self._reset_button = QPushButton()
483-
self._reset_button.setIcon(QIcon.fromTheme("reset"))
484+
self._reset_button.setIcon(_qicon("reset"))
484485
self._nav_hbox.addWidget(self._reset_button)
485486
self._loop_button = QPushButton()
486-
self._loop_button.setIcon(QIcon.fromTheme("restore"))
487+
self._loop_button.setIcon(_qicon("restore"))
487488
self._loop_button.setStyleSheet("background-color : lightgray;")
488489
self._loop_button._checked = True
489490

@@ -1494,18 +1495,18 @@ def closeEvent(event):
14941495
self._window.closeEvent = closeEvent
14951496

14961497
def _window_load_icons(self):
1497-
self._icons["help"] = QIcon.fromTheme("help")
1498-
self._icons["play"] = QIcon.fromTheme("play")
1499-
self._icons["pause"] = QIcon.fromTheme("pause")
1500-
self._icons["reset"] = QIcon.fromTheme("reset")
1501-
self._icons["scale"] = QIcon.fromTheme("scale")
1502-
self._icons["clear"] = QIcon.fromTheme("clear")
1503-
self._icons["movie"] = QIcon.fromTheme("movie")
1504-
self._icons["restore"] = QIcon.fromTheme("restore")
1505-
self._icons["screenshot"] = QIcon.fromTheme("screenshot")
1506-
self._icons["visibility_on"] = QIcon.fromTheme("visibility_on")
1507-
self._icons["visibility_off"] = QIcon.fromTheme("visibility_off")
1508-
self._icons["folder"] = QIcon.fromTheme("folder")
1498+
self._icons["help"] = _qicon("help")
1499+
self._icons["play"] = _qicon("play")
1500+
self._icons["pause"] = _qicon("pause")
1501+
self._icons["reset"] = _qicon("reset")
1502+
self._icons["scale"] = _qicon("scale")
1503+
self._icons["clear"] = _qicon("clear")
1504+
self._icons["movie"] = _qicon("movie")
1505+
self._icons["restore"] = _qicon("restore")
1506+
self._icons["screenshot"] = _qicon("screenshot")
1507+
self._icons["visibility_on"] = _qicon("visibility_on")
1508+
self._icons["visibility_off"] = _qicon("visibility_off")
1509+
self._icons["folder"] = _qicon("folder")
15091510

15101511
def _window_clean(self):
15111512
self.figure._plotter = None
@@ -1844,3 +1845,10 @@ def _testing_context(interactive):
18441845
finally:
18451846
pyvista.OFF_SCREEN = orig_offscreen
18461847
renderer.MNE_3D_BACKEND_TESTING = orig_testing
1848+
1849+
1850+
def _qicon(name):
1851+
# Get icon from theme with a file fallback
1852+
return QIcon.fromTheme(
1853+
name, QIcon(str(_ICONS_PATH / "light" / "actions" / f"{name}.svg"))
1854+
)

mne/viz/backends/_utils.py

+4-3
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@
3333
"notebook",
3434
)
3535
ALLOWED_QUIVER_MODES = ("2darrow", "arrow", "cone", "cylinder", "sphere", "oct")
36+
_ICONS_PATH = Path(__file__).parents[2] / "icons"
3637

3738

3839
def _get_colormap_from_array(
@@ -89,9 +90,9 @@ def _alpha_blend_background(ctable, background_color):
8990
def _qt_init_icons():
9091
from qtpy.QtGui import QIcon
9192

92-
icons_path = str(Path(__file__).parents[2] / "icons")
93-
QIcon.setThemeSearchPaths([icons_path])
94-
return icons_path
93+
QIcon.setThemeSearchPaths([str(_ICONS_PATH)] + QIcon.themeSearchPaths())
94+
QIcon.setFallbackThemeName("light")
95+
return str(_ICONS_PATH)
9596

9697

9798
@contextmanager

0 commit comments

Comments
 (0)