mirror of
https://github.com/Flowseal/tg-ws-proxy.git
synced 2026-05-22 23:41:44 +03:00
theme combobox
This commit is contained in:
4
linux.py
4
linux.py
@@ -138,7 +138,7 @@ def _on_exit(icon=None, item=None) -> None:
|
|||||||
|
|
||||||
|
|
||||||
def _edit_config_dialog() -> None:
|
def _edit_config_dialog() -> None:
|
||||||
if not ensure_ctk_thread(ctk):
|
if not ensure_ctk_thread(ctk, _config.get("appearance", "auto")):
|
||||||
_show_error("customtkinter не установлен.")
|
_show_error("customtkinter не установлен.")
|
||||||
return
|
return
|
||||||
|
|
||||||
@@ -193,7 +193,7 @@ def _show_first_run() -> None:
|
|||||||
ensure_dirs()
|
ensure_dirs()
|
||||||
if FIRST_RUN_MARKER.exists():
|
if FIRST_RUN_MARKER.exists():
|
||||||
return
|
return
|
||||||
if not ensure_ctk_thread(ctk):
|
if not ensure_ctk_thread(ctk, _config.get("appearance", "auto")):
|
||||||
FIRST_RUN_MARKER.touch()
|
FIRST_RUN_MARKER.touch()
|
||||||
return
|
return
|
||||||
|
|
||||||
|
|||||||
@@ -51,8 +51,11 @@ def ctk_theme_for_platform() -> CtkTheme:
|
|||||||
return CtkTheme()
|
return CtkTheme()
|
||||||
|
|
||||||
|
|
||||||
def apply_ctk_appearance(ctk: Any) -> None:
|
_APPEARANCE_MODE_MAP = {"auto": "system", "light": "Light", "dark": "Dark"}
|
||||||
ctk.set_appearance_mode("auto")
|
|
||||||
|
|
||||||
|
def apply_ctk_appearance(ctk: Any, mode: str = "auto") -> None:
|
||||||
|
ctk.set_appearance_mode(_APPEARANCE_MODE_MAP.get(mode, "system"))
|
||||||
ctk.set_default_color_theme("blue")
|
ctk.set_default_color_theme("blue")
|
||||||
|
|
||||||
def center_ctk_geometry(root: Any, width: int, height: int) -> None:
|
def center_ctk_geometry(root: Any, width: int, height: int) -> None:
|
||||||
|
|||||||
@@ -146,6 +146,11 @@ def _cfproxy_show_test_results(domain: str, results: dict) -> None:
|
|||||||
|
|
||||||
_INNER_W = 396
|
_INNER_W = 396
|
||||||
|
|
||||||
|
_APPEARANCE_OPTIONS = ["Авто", "Светлая", "Тёмная"]
|
||||||
|
_APPEARANCE_FROM_CFG = {"auto": "Авто", "light": "Светлая", "dark": "Тёмная"}
|
||||||
|
_APPEARANCE_TO_CFG = {"Авто": "auto", "Светлая": "light", "Тёмная": "dark"}
|
||||||
|
_APPEARANCE_TO_CTK = {"auto": "system", "light": "Light", "dark": "Dark"}
|
||||||
|
|
||||||
|
|
||||||
def _entry(ctk, parent, theme, *, var=None, width=0, height=36, radius=10, **kw):
|
def _entry(ctk, parent, theme, *, var=None, width=0, height=36, radius=10, **kw):
|
||||||
opts = dict(
|
opts = dict(
|
||||||
@@ -249,6 +254,7 @@ class TrayConfigFormWidgets:
|
|||||||
cfproxy_var: Optional[Any] = None
|
cfproxy_var: Optional[Any] = None
|
||||||
cfproxy_priority_var: Optional[Any] = None
|
cfproxy_priority_var: Optional[Any] = None
|
||||||
cfproxy_domain_var: Optional[Any] = None
|
cfproxy_domain_var: Optional[Any] = None
|
||||||
|
appearance_var: Optional[Any] = None
|
||||||
|
|
||||||
|
|
||||||
def install_tray_config_form(
|
def install_tray_config_form(
|
||||||
@@ -272,6 +278,33 @@ def install_tray_config_form(
|
|||||||
header, text=f"v{__version__}",
|
header, text=f"v{__version__}",
|
||||||
font=(theme.ui_font_family, 12),
|
font=(theme.ui_font_family, 12),
|
||||||
text_color=theme.text_secondary, anchor="e",
|
text_color=theme.text_secondary, anchor="e",
|
||||||
|
).pack(side="right", padx=(4, 0))
|
||||||
|
appearance_var = ctk.StringVar(
|
||||||
|
value=_APPEARANCE_FROM_CFG.get(cfg.get("appearance", "auto"), "Авто")
|
||||||
|
)
|
||||||
|
|
||||||
|
def _on_appearance_change(choice: str) -> None:
|
||||||
|
cfg_val = _APPEARANCE_TO_CFG.get(choice, "auto")
|
||||||
|
ctk.set_appearance_mode(_APPEARANCE_TO_CTK[cfg_val])
|
||||||
|
|
||||||
|
ctk.CTkComboBox(
|
||||||
|
header,
|
||||||
|
values=_APPEARANCE_OPTIONS,
|
||||||
|
variable=appearance_var,
|
||||||
|
width=102,
|
||||||
|
height=28,
|
||||||
|
font=(theme.ui_font_family, 12),
|
||||||
|
text_color=theme.text_secondary,
|
||||||
|
fg_color=theme.field_bg,
|
||||||
|
border_color=theme.field_border,
|
||||||
|
button_color=theme.field_border,
|
||||||
|
button_hover_color=theme.text_secondary,
|
||||||
|
dropdown_fg_color=theme.field_bg,
|
||||||
|
dropdown_text_color=theme.text_primary,
|
||||||
|
dropdown_hover_color=theme.field_border,
|
||||||
|
corner_radius=8,
|
||||||
|
state="readonly",
|
||||||
|
command=_on_appearance_change,
|
||||||
).pack(side="right")
|
).pack(side="right")
|
||||||
|
|
||||||
conn = _config_section(ctk, frame, theme, "Подключение MTProto")
|
conn = _config_section(ctk, frame, theme, "Подключение MTProto")
|
||||||
@@ -488,6 +521,7 @@ def install_tray_config_form(
|
|||||||
cfproxy_var=cfproxy_var,
|
cfproxy_var=cfproxy_var,
|
||||||
cfproxy_priority_var=cfproxy_priority_var,
|
cfproxy_priority_var=cfproxy_priority_var,
|
||||||
cfproxy_domain_var=cfproxy_domain_var,
|
cfproxy_domain_var=cfproxy_domain_var,
|
||||||
|
appearance_var=appearance_var,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
@@ -572,6 +606,8 @@ def validate_config_form(
|
|||||||
domain = widgets.cfproxy_domain_var.get().strip()
|
domain = widgets.cfproxy_domain_var.get().strip()
|
||||||
if domain:
|
if domain:
|
||||||
new_cfg["cfproxy_domain"] = domain
|
new_cfg["cfproxy_domain"] = domain
|
||||||
|
if widgets.appearance_var is not None:
|
||||||
|
new_cfg["appearance"] = _APPEARANCE_TO_CFG.get(widgets.appearance_var.get(), "auto")
|
||||||
return new_cfg
|
return new_cfg
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -401,7 +401,7 @@ _ctk_root: Any = None
|
|||||||
_ctk_root_ready = threading.Event()
|
_ctk_root_ready = threading.Event()
|
||||||
|
|
||||||
|
|
||||||
def ensure_ctk_thread(ctk: Any) -> bool:
|
def ensure_ctk_thread(ctk: Any, mode: str = "auto") -> bool:
|
||||||
global _ctk_root
|
global _ctk_root
|
||||||
if ctk is None:
|
if ctk is None:
|
||||||
return False
|
return False
|
||||||
@@ -413,7 +413,7 @@ def ensure_ctk_thread(ctk: Any) -> bool:
|
|||||||
from ui.ctk_theme import apply_ctk_appearance, install_tkinter_variable_del_guard
|
from ui.ctk_theme import apply_ctk_appearance, install_tkinter_variable_del_guard
|
||||||
|
|
||||||
install_tkinter_variable_del_guard()
|
install_tkinter_variable_del_guard()
|
||||||
apply_ctk_appearance(ctk)
|
apply_ctk_appearance(ctk, mode)
|
||||||
_ctk_root = ctk.CTk()
|
_ctk_root = ctk.CTk()
|
||||||
_ctk_root.withdraw()
|
_ctk_root.withdraw()
|
||||||
_ctk_root_ready.set()
|
_ctk_root_ready.set()
|
||||||
|
|||||||
@@ -200,7 +200,7 @@ def _on_exit(icon=None, item=None) -> None:
|
|||||||
# settings dialog
|
# settings dialog
|
||||||
|
|
||||||
def _edit_config_dialog() -> None:
|
def _edit_config_dialog() -> None:
|
||||||
if not ensure_ctk_thread(ctk):
|
if not ensure_ctk_thread(ctk, _config.get("appearance", "auto")):
|
||||||
_show_error("customtkinter не установлен.")
|
_show_error("customtkinter не установлен.")
|
||||||
return
|
return
|
||||||
|
|
||||||
@@ -266,7 +266,7 @@ def _show_first_run() -> None:
|
|||||||
ensure_dirs()
|
ensure_dirs()
|
||||||
if FIRST_RUN_MARKER.exists():
|
if FIRST_RUN_MARKER.exists():
|
||||||
return
|
return
|
||||||
if not ensure_ctk_thread(ctk):
|
if not ensure_ctk_thread(ctk, _config.get("appearance", "auto")):
|
||||||
FIRST_RUN_MARKER.touch()
|
FIRST_RUN_MARKER.touch()
|
||||||
return
|
return
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user