Untitled
unknown
plain_text
a year ago
3.5 kB
7
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