AIstudioProxyAPI / gui /styles.py
peijun1's picture
Deploy AI Studio Proxy API to Hugging Face Spaces
a5784e9
Raw
History Blame Contribute Delete
3.81 kB
"""
GUI Launcher Styles
CustomTkinter theme configuration and custom widget styles.
"""
from typing import Optional
import customtkinter as ctk
from .config import COLORS, CTK_COLOR_THEME, DIMENSIONS
def apply_theme(root: Optional[ctk.CTk] = None, appearance_mode: str = "dark") -> None:
"""
Apply the modern theme using CustomTkinter's built-in theming.
CustomTkinter handles most styling automatically. This function sets
the appearance mode and color theme globally.
Args:
root: Optional CTk root window (for any additional configuration)
appearance_mode: "dark", "light", or "system"
"""
# Import here to avoid circular imports
from .theme import set_appearance_mode
# Set appearance mode via theme module
set_appearance_mode(appearance_mode)
# Set color theme
ctk.set_default_color_theme(CTK_COLOR_THEME)
def get_button_colors(style: str = "default") -> dict:
"""
Get color configuration for CTkButton based on style.
Args:
style: One of "default", "success", "danger", "accent", "outline"
Returns:
Dictionary of color parameters for CTkButton
"""
styles = {
"default": {
"fg_color": COLORS["bg_light"],
"hover_color": COLORS["border_light"],
"text_color": COLORS["text_primary"],
},
"success": {
"fg_color": COLORS["success"],
"hover_color": COLORS["success_hover"],
"text_color": COLORS["text_on_color"], # Always white for contrast
},
"danger": {
"fg_color": COLORS["error"],
"hover_color": COLORS["error_hover"],
"text_color": COLORS["text_on_color"], # Always white for contrast
},
"accent": {
"fg_color": COLORS["accent"],
"hover_color": COLORS["accent_hover"],
"text_color": COLORS["text_on_color"], # Always white for contrast
},
"outline": {
"fg_color": "transparent",
"hover_color": COLORS["bg_light"],
"text_color": COLORS["text_primary"],
"border_width": DIMENSIONS["border_width"],
"border_color": COLORS["accent"],
},
"ghost": {
"fg_color": "transparent",
"hover_color": COLORS["bg_medium"],
"text_color": COLORS["text_secondary"],
},
}
return styles.get(style, styles["default"])
def get_entry_style() -> dict:
"""Get standard entry field styling."""
return {
"corner_radius": DIMENSIONS["corner_radius_small"],
"border_width": DIMENSIONS["border_width"],
"border_color": COLORS["border"],
"fg_color": COLORS["bg_light"],
"text_color": COLORS["text_primary"],
"placeholder_text_color": COLORS["text_muted"],
}
def get_frame_style(variant: str = "default") -> dict:
"""
Get frame styling parameters.
Args:
variant: One of "default", "card", "transparent"
"""
variants = {
"default": {
"fg_color": COLORS["bg_dark"],
"corner_radius": 0,
},
"card": {
"fg_color": COLORS["bg_medium"],
"corner_radius": DIMENSIONS["corner_radius"],
"border_width": 1,
"border_color": COLORS["border"],
},
"transparent": {
"fg_color": "transparent",
"corner_radius": 0,
},
}
return variants.get(variant, variants["default"])
# Legacy compatibility - ModernStyle class that just calls apply_theme
class ModernStyle:
"""Legacy compatibility wrapper for apply_theme()."""
@staticmethod
def apply(root) -> None:
"""Apply theme - for backwards compatibility."""
apply_theme(root)