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.