Untitled
unknown
plain_text
5 months ago
3.5 kB
4
Indexable
class ResetFillLevelsScreen(ctk.CTkToplevel): def __init__(self, parent, dark_mode: bool, language='EN'): super().__init__(parent) # 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 dark mode self.dark_mode = dark_mode self.bg_color = '#1c1c1e' if dark_mode else '#f5f5f7' self.configure(fg_color=self.bg_color) # Create semi-transparent overlay self.overlay = ctk.CTkFrame( self, fg_color=('#00000040' if dark_mode else '#FFFFFF40'), corner_radius=0 ) self.overlay.place(relx=0, rely=0, relwidth=1, relheight=1) # Create circles frame self.circles_frame = ctk.CTkFrame(self, fg_color='transparent') self.circles_frame.place(relx=0.5, rely=0.5, anchor='center') # Add padding frame self.padding_frame = ctk.CTkFrame(self.circles_frame, fg_color='transparent') self.padding_frame.pack(padx=50) # Get current bin configuration config = load_bin_config() # Create list to track circle widgets self.circle_widgets = [] # Create circles for each bin in config for bin_config in config['bins']: display_name = bin_config['name'] # Check if this is a default bin that needs translation if display_name in TRANSLATIONS[language]: display_name = TRANSLATIONS[language][display_name] container = ctk.CTkFrame(self.padding_frame, fg_color='transparent') container.pack(side='left', padx=15) progress = ResetCircleButton( container, size=220, label=display_name, circle_color=bin_config['circle_color'], circle_color_dark=bin_config['circle_color_dark'], command=lambda wt=display_name: self._reset_fill_level(wt) ) progress.pack() progress.set_dark_mode(dark_mode) # Store circle widgets self.circle_widgets.append(progress) # Load and set current fill level levels = load_fill_levels() if bin_config['id'] in levels: progress.set_fill_level(levels[bin_config['id']]) # Bind click event to the overlay for closing self.overlay.bind('<Button-1>', lambda e: self.destroy()) # Prevent clicks on the overlay from propagating to widgets below self.overlay.lift() self.circles_frame.lift() def _reset_fill_level(self, waste_type): """Reset fill level for the specified waste type""" waste_id = get_safe_waste_id(waste_type) print(f"Resetting {waste_type} (ID: {waste_id})") # Update JSON file levels = load_fill_levels() levels[waste_id] = 0 save_fill_levels(levels) # Update main window circles CircularProgress.update_all_instances() # Close the reset screen after a short delay self.after(200, self.destroy)
Editor is loading...
Leave a Comment