Untitled
unknown
plain_text
5 months ago
7.7 kB
4
Indexable
class SettingsMenu(ctk.CTkFrame): def __init__(self, parent, dark_mode): # Fixed dimensions menu_width = 280 # Fixed width window_height = parent.winfo_height() super().__init__( parent, fg_color='#1c1c1e' if dark_mode else '#f5f5f7', width=menu_width, height=window_height ) self.parent = parent self.dark_mode = dark_mode self.is_open = False self.animation_running = False self.current_width = 0 self.target_width = menu_width # Config file path self.config_file = "settings.json" # Add border color based on dark mode self.border_color = '#2c2c2e' if dark_mode else '#e5e5e7' self.configure(border_width=2, border_color=self.border_color) # Place the frame initially off-screen self.place(relx=1, rely=0, x=menu_width, y=0, anchor='ne', height=window_height) # Load saved settings self.load_settings() # Create settings content self.create_menu_content() # Create settings button (rest of the button code remains the same) try: is_light_bg = not dark_mode icon_suffix = "-b" if is_light_bg else "-w" icon_image = ctk.CTkImage( light_image=Image.open(f"icons/settings{icon_suffix}.png"), dark_image=Image.open(f"icons/settings{icon_suffix}.png"), size=(30, 30) ) self.settings_button = ctk.CTkButton( self.parent, image=icon_image, text="", width=30, height=30, fg_color="transparent", hover_color='#2c2c2e' if dark_mode else '#e5e5e7', command=self.toggle_menu ) self.settings_button.place(relx=0.97, rely=0.05, anchor='center') except Exception as e: print(f"Error loading settings icon: {e}") self.settings_button = ctk.CTkButton( self.parent, text="⚙", width=30, height=30, fg_color="transparent", hover_color='#2c2c2e' if dark_mode else '#e5e5e7', command=self.toggle_menu ) self.settings_button.place(relx=0.97, rely=0.04, anchor='center') # Bind click event to parent window self.parent.bind("<Button-1>", self.check_click_location) def load_settings(self): try: with open(self.config_file, 'r') as f: settings = json.load(f) self.dark_mode = settings.get('DARK_MODE', False) self.language = settings.get('LANGUAGE', 'EN') except FileNotFoundError: self.dark_mode = False self.language = 'EN' self.save_settings() def save_settings(self): settings = { 'DARK_MODE': self.dark_mode, 'LANGUAGE': self.language } with open(self.config_file, 'w') as f: json.dump(settings, f) def create_menu_content(self): """Create the content of the settings menu""" text_color = 'white' if self.dark_mode else 'black' # Title title_text = "Einstellungen" if self.language == 'DE' else "Settings" title = ctk.CTkLabel( self, text=title_text, font=("Dongle", 24, "bold"), text_color=text_color ) title.pack(pady=(20, 30), padx=20, anchor='w') # Settings container settings_frame = ctk.CTkFrame( self, fg_color="transparent", ) settings_frame.pack(fill='x', padx=20) # Dark Mode Switch dark_mode_text = "Dunkler Modus" if self.language == 'DE' else "Dark Mode" dark_mode_switch = ctk.CTkSwitch( settings_frame, text=dark_mode_text, command=self.toggle_dark_mode, font=("Dongle", 18), text_color=text_color, ) dark_mode_switch.pack(pady=(0, 20), anchor='w') dark_mode_switch.select() if self.dark_mode else dark_mode_switch.deselect() # Language Selection language_text = "Sprache" if self.language == 'DE' else "Language" language_label = ctk.CTkLabel( settings_frame, text=language_text, font=("Dongle", 18), text_color=text_color ) language_label.pack(anchor='w') language_var = ctk.StringVar(value=self.language) language_frame = ctk.CTkFrame(settings_frame, fg_color="transparent") language_frame.pack(fill='x', pady=(5, 20)) # Radio buttons for language selection de_radio = ctk.CTkRadioButton( language_frame, text="Deutsch", variable=language_var, value="DE", command=lambda: self.change_language("DE"), font=("Dongle", 16), text_color=text_color ) de_radio.pack(side='left', padx=(0, 20)) en_radio = ctk.CTkRadioButton( language_frame, text="English", variable=language_var, value="EN", command=lambda: self.change_language("EN"), font=("Dongle", 16), text_color=text_color ) en_radio.pack(side='left') def toggle_dark_mode(self): self.dark_mode = not self.dark_mode self.parent.configure(fg_color='#1c1c1e' if self.dark_mode else '#f5f5f7') self.configure(fg_color='#1c1c1e' if self.dark_mode else '#f5f5f7') self.border_color = '#2c2c2e' if self.dark_mode else '#e5e5e7' self.configure(border_color=self.border_color) # Update appearance mode ctk.set_appearance_mode("dark" if self.dark_mode else "light") # Update circles for circle in self.parent.winfo_children(): if isinstance(circle, CircularProgress): circle.set_dark_mode(self.dark_mode) # Save settings self.save_settings() # Recreate menu content to update colors for widget in self.winfo_children(): widget.destroy() self.create_menu_content() def change_language(self, new_language): self.language = new_language self.parent.LANGUAGE = new_language # Update root's language # Update circle labels for circle in self.parent.winfo_children(): if isinstance(circle, CircularProgress): waste_type = circle.label # Find the corresponding translation for de_key, en_value in TRANSLATIONS['EN'].items(): if (en_value == waste_type and new_language == 'DE') or \ (de_key == waste_type and new_language == 'EN'): circle.label = TRANSLATIONS[new_language][de_key] circle.draw() break # Save settings self.save_settings() # Recreate menu content to update text for widget in self.winfo_children(): widget.destroy() self.create_menu_content()
Editor is loading...
Leave a Comment