Untitled
unknown
plain_text
4 months ago
7.1 kB
4
Indexable
import customtkinter as ctk from PIL import Image, ImageTk class ClassificationResultScreen(ctk.CTkToplevel): def __init__(self, parent, waste_type: str, dark_mode: bool, language='EN'): super().__init__(parent) # Constants for animation self.DISPLAY_TIME = 5 # seconds self.PROGRESS_HEIGHT = 6 self.start_time = time.time() self._destroyed = False # Store parameters self.waste_type = waste_type self.dark_mode = dark_mode self.language = language # Make it fullscreen and disable all close operations self.overrideredirect(True) self.geometry(f"{self.winfo_screenwidth()}x{self.winfo_screenheight()}+0+0") self.protocol("WM_DELETE_WINDOW", lambda: None) self.attributes('-topmost', True) # Set colors based on waste type and dark mode self.bg_color = self._get_waste_color() self.text_color = self._get_text_color() self.configure(fg_color=self.bg_color) # Create progress bar frame at the top self.progress_frame = ctk.CTkFrame( self, height=self.PROGRESS_HEIGHT, fg_color='white' if self.text_color == 'black' else 'black', corner_radius=0 ) self.progress_frame.pack(fill='x', pady=0) # Create progress bar self.progress_bar = ctk.CTkFrame( self.progress_frame, height=self.PROGRESS_HEIGHT, fg_color='black' if self.text_color == 'grey' else 'grey', corner_radius=0 ) self.progress_bar.place(relx=0, rely=0, relwidth=1) # Create main container self.container = ctk.CTkFrame( self, fg_color=self.bg_color, corner_radius=0 ) self.container.pack(fill='both', expand=True) # Get translated waste type self.translated_waste_type = self._get_translated_waste_type() # Add the result text self.result_label = ctk.CTkLabel( self.container, text=self.translated_waste_type, font=('Dongle', 48, 'bold'), text_color=self.text_color ) self.result_label.pack(pady=(80, 20)) # Add icon try: icon_path = f"icons/{self._get_icon_name()}.png" icon_image = ctk.CTkImage( light_image=Image.open(icon_path), dark_image=Image.open(icon_path), size=(120, 120) ) self.icon_label = ctk.CTkLabel( self.container, text="", image=icon_image ) self.icon_label.pack(pady=20) except Exception as e: print(f"Error loading icon: {e}") self.bind("<Destroy>", self._on_destroy) self.update_progress() def _on_destroy(self, event): """Handle the window destruction event""" if event.widget is self: self._destroyed = True def _get_waste_color(self): """Get background color based on waste type and dark mode""" color_mapping = { 'Paper': ('#0d7dd4', '#e6f3ff'), # (dark mode, light mode) 'Papier': ('#0d7dd4', '#e6f3ff'), 'Recycling': ('#fec20c', '#fff3d6'), 'Gelber Sack': ('#fec20c', '#fff3d6'), 'Organic': ('#8a6849', '#e8d5c4'), 'Biomüll': ('#8a6849', '#e8d5c4'), 'Residual': ('#3a3a3c', '#cececf'), 'Restmüll': ('#3a3a3c', '#cececf') } colors = color_mapping.get(self.waste_type, ('#3a3a3c', '#cececf')) return colors[0] if self.dark_mode else colors[1] def _get_text_color(self): """Determine text color based on background""" light_bg_types = ['Gelber Sack', 'Recycling'] if self.waste_type in light_bg_types and self.dark_mode: return 'black' return 'white' if self.dark_mode else 'black' def _get_translated_waste_type(self): """Get waste type name in correct language""" return self.waste_type # Simplified for testing def _get_icon_name(self): """Get icon filename based on waste type""" icon_mapping = { 'Paper': 'paper', 'Papier': 'paper', 'Recycling': 'recycling', 'Gelber Sack': 'recycling', 'Organic': 'organic', 'Biomüll': 'organic', 'Residual': 'residual', 'Restmüll': 'residual' } return icon_mapping.get(self.waste_type) def update_progress(self): """Update the progress bar and check if window should close""" if self._destroyed: return elapsed = time.time() - self.start_time remaining = max(0, 1 - (elapsed / self.DISPLAY_TIME)) if remaining > 0: self.progress_bar.place_configure(relwidth=remaining) self.after(16, self.update_progress) else: if not self._destroyed: self.destroy() # Test function to launch the screen def test_classification_result(): root = ctk.CTk() root.geometry("800x600") def show_result(): # Get values from controls waste_type = waste_var.get() dark_mode = dark_mode_var.get() language = lang_var.get() ClassificationResultScreen(root, waste_type, dark_mode, language) # Create test controls controls_frame = ctk.CTkFrame(root) controls_frame.pack(pady=20) # Waste type selector waste_types = ['Paper', 'Recycling', 'Organic', 'Residual', 'Papier', 'Gelber Sack', 'Biomüll', 'Restmüll'] waste_var = ctk.StringVar(value=waste_types[0]) waste_menu = ctk.CTkOptionMenu(controls_frame, variable=waste_var, values=waste_types) waste_menu.pack(pady=5) # Dark mode toggle dark_mode_var = ctk.BooleanVar(value=False) dark_mode_switch = ctk.CTkSwitch(controls_frame, text="Dark Mode", variable=dark_mode_var) dark_mode_switch.pack(pady=5) # Language selector lang_var = ctk.StringVar(value='EN') lang_frame = ctk.CTkFrame(controls_frame) lang_frame.pack(pady=5) ctk.CTkRadioButton(lang_frame, text='EN', variable=lang_var, value='EN').pack(side='left', padx=5) ctk.CTkRadioButton(lang_frame, text='DE', variable=lang_var, value='DE').pack(side='left', padx=5) # Test button test_btn = ctk.CTkButton(controls_frame, text="Show Result Screen", command=show_result) test_btn.pack(pady=10) root.mainloop() if __name__ == "__main__": test_classification_result()
Editor is loading...
Leave a Comment