Edit on GitHub

azure

Azure theme for ttk.

 1# SPDX-FileCopyrightText: © 2023 rdbende <rdbende@proton.me>
 2# SPDX-FileCopyrightText: © 2024 Stacey Adams <stacey.belle.rose@gmail.com>
 3# SPDX-License-Identifier: MIT
 4
 5"""
 6Azure theme for ttk.
 7"""
 8
 9from __future__ import annotations
10
11import tkinter as tk
12from functools import partial
13from pathlib import Path
14from tkinter import ttk
15
16TCL_THEME_FILE_PATH = Path(__file__).with_name("azure.tcl").absolute()
17
18
19def init_theme(root: tk.Tk) -> None:
20    """
21    Initialize the theme.
22
23    Parameters
24    ----------
25    root : Tk
26        A Tk instance.
27    """
28    if not isinstance(root, tk.Tk):
29        msg = "root must be a `tk.Tk` instance!"
30        raise TypeError(msg)
31    style = ttk.Style(root)
32    if "azure-light" not in style.theme_names():
33        root.tk.call("source", str(TCL_THEME_FILE_PATH))
34
35
36def get_theme(root: tk.Tk) -> str:
37    """
38    Get the current theme.
39
40    Parameters
41    ----------
42    root : Tk
43        A Tk instance.
44    """
45    init_theme(root)
46    style = ttk.Style(master=root)
47    theme = style.theme_use()
48    return {"azure-dark": "dark", "azure-light": "light"}.get(theme, theme)
49
50
51def set_theme(theme: str, root: tk.Tk) -> None:
52    """
53    Set the theme.
54
55    Parameters
56    ----------
57    theme : str
58        One of "light" or "dark".
59    root : Tk
60        A Tk instance.
61    """
62    init_theme(root)
63    theme = theme.lower()
64    if theme not in {"dark", "light"}:
65        msg = f"not a valid azure_ttk theme: {theme}"
66        raise ValueError(msg)
67    root.tk.call("set_theme", theme)
68
69
70def toggle_theme(root: tk.Tk) -> None:
71    """
72    Toggle the theme between Light and Dark.
73
74    Parameters
75    ----------
76    root : Tk
77        A Tk instance.
78    """
79    init_theme(root)
80    style = ttk.Style(master=root)
81    set_theme("light" if style.theme_use() == "azure-dark" else "dark", root)
82
83
84use_dark_theme = partial(set_theme, "dark")
85use_light_theme = partial(set_theme, "light")
def init_theme(root: tkinter.Tk) -> None:
20def init_theme(root: tk.Tk) -> None:
21    """
22    Initialize the theme.
23
24    Parameters
25    ----------
26    root : Tk
27        A Tk instance.
28    """
29    if not isinstance(root, tk.Tk):
30        msg = "root must be a `tk.Tk` instance!"
31        raise TypeError(msg)
32    style = ttk.Style(root)
33    if "azure-light" not in style.theme_names():
34        root.tk.call("source", str(TCL_THEME_FILE_PATH))

Initialize the theme.

Parameters
  • root (Tk): A Tk instance.
def get_theme(root: tkinter.Tk) -> str:
37def get_theme(root: tk.Tk) -> str:
38    """
39    Get the current theme.
40
41    Parameters
42    ----------
43    root : Tk
44        A Tk instance.
45    """
46    init_theme(root)
47    style = ttk.Style(master=root)
48    theme = style.theme_use()
49    return {"azure-dark": "dark", "azure-light": "light"}.get(theme, theme)

Get the current theme.

Parameters
  • root (Tk): A Tk instance.
def set_theme(theme: str, root: tkinter.Tk) -> None:
52def set_theme(theme: str, root: tk.Tk) -> None:
53    """
54    Set the theme.
55
56    Parameters
57    ----------
58    theme : str
59        One of "light" or "dark".
60    root : Tk
61        A Tk instance.
62    """
63    init_theme(root)
64    theme = theme.lower()
65    if theme not in {"dark", "light"}:
66        msg = f"not a valid azure_ttk theme: {theme}"
67        raise ValueError(msg)
68    root.tk.call("set_theme", theme)

Set the theme.

Parameters
  • theme (str): One of "light" or "dark".
  • root (Tk): A Tk instance.
def toggle_theme(root: tkinter.Tk) -> None:
71def toggle_theme(root: tk.Tk) -> None:
72    """
73    Toggle the theme between Light and Dark.
74
75    Parameters
76    ----------
77    root : Tk
78        A Tk instance.
79    """
80    init_theme(root)
81    style = ttk.Style(master=root)
82    set_theme("light" if style.theme_use() == "azure-dark" else "dark", root)

Toggle the theme between Light and Dark.

Parameters
  • root (Tk): A Tk instance.