Untitled
def main(): ctk.deactivate_automatic_dpi_awareness() settings = load_settings() DARK_MODE = settings.get('dark_mode', False) LANGUAGE = settings.get('language', 'DE') SHOW_WIFI_STATUS = settings.get('show_wifi_status', True) reboot_button = setup_reboot_button() bin_config = BinConfiguration() observer = setup_file_monitoring(CircularProgress.update_all_instances) ctk.set_appearance_mode("dark" if DARK_MODE else "light") ctk.set_default_color_theme("dark-blue") root = ctk.CTk() root.title("SortiMate") root.LANGUAGE = LANGUAGE root.DARK_MODE = DARK_MODE root.overrideredirect(True) root.geometry("1024x600+0+0") root.focus_set() bg_color = '#1c1c1e' if DARK_MODE else '#f5f5f7' main_frame = ctk.CTkFrame(root, fg_color=bg_color) main_frame.pack(fill='both', expand=True) # Create loading screen first loading_label = ctk.CTkLabel( main_frame, text=TRANSLATIONS[LANGUAGE]['calibrating'], font=("Dongle", 42, "bold"), text_color='white' if DARK_MODE else 'black' ) loading_label.place(relx=0.5, rely=0.5, anchor='center') # Initialize turntable in a separate thread turntable = None classification_prompt = None def init_turntable(): nonlocal turntable turntable = TurntableController() root.after(0, setup_main_interface) def setup_main_interface(): nonlocal classification_prompt # Remove loading label loading_label.destroy() # Create rest of interface sayings = load_sayings() current_language_sayings = sayings[LANGUAGE] initial_saying = random.choice(current_language_sayings) saying_label = create_saying_label( main_frame, DARK_MODE, check_wifi=True, show_wifi_status=SHOW_WIFI_STATUS ) saying_label.configure(text=initial_saying) settings_menu = SettingsMenu(main_frame, DARK_MODE, LANGUAGE) # Create reset button try: is_light_bg = not DARK_MODE icon_suffix = "-b" if is_light_bg else "-w" reset_icon = ctk.CTkImage( light_image=Image.open(f"icons/reset{icon_suffix}.png"), dark_image=Image.open(f"icons/reset{icon_suffix}.png"), size=(30, 30) ) reset_button = ctk.CTkButton( main_frame, image=reset_icon, text="", width=30, height=30, fg_color="transparent", hover_color='#2c2c2e' if DARK_MODE else '#e5e5e7', command=lambda: ResetFillLevelsScreen(root, DARK_MODE, LANGUAGE) ) reset_button.place(relx=0.03, rely=0.05, anchor='center') except Exception as e: print(f"Error loading reset icon: {e}") reset_button = ctk.CTkButton( main_frame, text="?", width=30, height=30, fg_color="transparent", hover_color='#2c2c2e' if DARK_MODE else '#e5e5e7', command=lambda: ResetFillLevelsScreen(root, DARK_MODE, LANGUAGE) ) reset_button.place(relx=0.03, rely=0.05, anchor='center') close_button = CloseButton(main_frame, command=root.destroy) close_button.place(relx=0.05, rely=0.95, anchor='center') circles_frame = ctk.CTkFrame(main_frame, fg_color=bg_color) circles_frame.place(relx=0.5, rely=0.5, anchor='center') padding_frame = ctk.CTkFrame(circles_frame, fg_color=bg_color) padding_frame.pack(padx=50) # Create circles for each bin from configuration for bin_config_item in bin_config.bins: container = ctk.CTkFrame(padding_frame, fg_color=bg_color) container.pack(side='left', padx=15) progress = CircularProgress( container, bin_id=bin_config_item['id'], size=220 ) progress.pack() progress.set_dark_mode(root.DARK_MODE) classification_prompt = ClassificationPrompt( main_frame, DARK_MODE, LANGUAGE, turntable=turntable ) classification_prompt.place(relx=0.5, rely=0.8, anchor='center') # Start turntable initialization in a separate thread threading.Thread(target=init_turntable, daemon=True).start() try: root.mainloop() finally: observer.stop() observer.join() if classification_prompt is not None: classification_prompt.cleanup()
Leave a Comment