Source code for napari._qt.qt_resources

from pathlib import Path
from typing import Optional

from napari._qt.qt_resources._svg import QColoredSVGIcon
from napari.settings import get_settings

__all__ = ['QColoredSVGIcon', 'get_stylesheet']


STYLE_PATH = (Path(__file__).parent / 'styles').resolve()
STYLES = {x.stem: str(x) for x in STYLE_PATH.iterdir() if x.suffix == '.qss'}


[docs] def get_stylesheet( theme_id: Optional[str] = None, extra: Optional[list[str]] = None, extra_variables: Optional[dict[str, str]] = None, ) -> str: """Combine all qss files into single, possibly pre-themed, style string. Parameters ---------- theme_id : str, optional Theme to apply to the stylesheet. If no theme is provided, the returned stylesheet will still have ``{{ template_variables }}`` that need to be replaced using the :func:`napari.utils.theme.template` function prior to using the stylesheet. extra : list of str, optional Additional paths to QSS files to include in stylesheet, by default None extra_variables : dict, optional Dictionary of variables values that replace default theme values. For example: `{ 'font_size': '14pt'}` Returns ------- css : str The combined stylesheet. """ stylesheet = '' for key in sorted(STYLES.keys()): file = STYLES[key] with open(file) as f: stylesheet += f.read() if extra: for file in extra: with open(file) as f: stylesheet += f.read() if theme_id: from napari.utils.theme import get_theme, template theme_dict = get_theme(theme_id).to_rgb_dict() if extra_variables: theme_dict.update(extra_variables) return template(stylesheet, **theme_dict) return stylesheet
[docs] def get_current_stylesheet(extra: Optional[list[str]] = None) -> str: """ Return the current stylesheet base on settings. This is wrapper around :py:func:`get_stylesheet` that takes the current theme base on settings. Parameters ---------- extra : list of str, optional Additional paths to QSS files to include in stylesheet, by default None Returns ------- css : str The combined stylesheet. """ settings = get_settings() return get_stylesheet(settings.appearance.theme, extra)