Spaces:
Running
Running
from pathlib import Path | |
import platform | |
if platform.system() == "Darwin": | |
sun_valley_tcl = "sun-valley_darwin.tcl" | |
else: | |
sun_valley_tcl = "sun-valley.tcl" | |
inited = False | |
root = None | |
def init(func): | |
def wrapper(*args, **kwargs): | |
global inited | |
global root | |
if not inited: | |
from tkinter import _default_root | |
path = (Path(__file__).parent / sun_valley_tcl).resolve() | |
try: | |
_default_root.tk.call("source", str(path)) | |
except AttributeError: | |
raise RuntimeError( | |
"can't set theme. " | |
"Tk is not initialized. " | |
"Please first create a tkinter.Tk instance, then set the theme." | |
) from None | |
else: | |
inited = True | |
root = _default_root | |
return func(*args, **kwargs) | |
return wrapper | |
def set_theme(theme): | |
if theme not in {"dark", "light"}: | |
raise RuntimeError(f"not a valid theme name: {theme}") | |
root.tk.call("set_theme", theme) | |
def get_theme(): | |
theme = root.tk.call("ttk::style", "theme", "use") | |
try: | |
return {"sun-valley-dark": "dark", "sun-valley-light": "light"}[theme] | |
except KeyError: | |
return theme | |
def toggle_theme(): | |
if get_theme() == "dark": | |
use_light_theme() | |
else: | |
use_dark_theme() | |
use_dark_theme = lambda: set_theme("dark") | |
use_light_theme = lambda: set_theme("light") | |