Untitled
unknown
plain_text
3 months ago
4.2 kB
5
Indexable
class LidAlertScreen(ctk.CTkToplevel): def __init__(self, parent, dark_mode: bool, language='EN'): super().__init__(parent) print("\n=== Initializing LidAlertScreen ===") self.language = language self.dark_mode = dark_mode self._destroyed = False self.parent = parent # Initialize the reed switch self.reed_switch = Button(25, pull_up=True) self.reed_switch.when_pressed = self.handle_lid_closed # 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 background color based on dark mode bg_color = '#1c1c1e' if dark_mode else '#f5f5f7' border_color = '#2c2c2e' if dark_mode else '#e5e5e7' self.configure(fg_color=bg_color) # Create main container with padding self.container = ctk.CTkFrame(self, fg_color=bg_color, corner_radius=0) self.container.pack(fill='both', expand=True, padx=30, pady=30) # Add a border around the alert box self.border_frame = ctk.CTkFrame(self.container, fg_color=border_color, corner_radius=10) self.border_frame.pack(fill='both', expand=True, padx=10, pady=10) # Create colored alert box inside the border (using pastel red) pastel_red = "#FFB3B3" # Light pastel red self.alert_box = ctk.CTkFrame(self.border_frame, fg_color=pastel_red, corner_radius=8) self.alert_box.pack(fill='both', expand=True, padx=5, pady=5) # Add the warning message message_text = TRANSLATIONS[language].get('lid_open_warning', "WARNING: Lid is open!\nPlease close the lid to continue.") self.message_label = ctk.CTkLabel( self.alert_box, text=message_text, font=('Dongle', 36), # Slightly larger font than waste alert text_color='#000000' # Black text for better contrast on pastel red ) self.message_label.place(relx=0.5, rely=0.35, anchor='center') # Add warning icon try: icon_image = ctk.CTkImage( light_image=Image.open("icons/warning-b.png"), # Assuming you have a warning icon dark_image=Image.open("icons/warning-b.png"), size=(65, 65) # Slightly larger than waste alert ) self.icon_label = ctk.CTkLabel( self.alert_box, image=icon_image, text="" ) self.icon_label.place(relx=0.5, rely=0.55, anchor='center') except Exception as e: print(f"Error loading warning icon: {e}") self.icon_label = ctk.CTkLabel( self.alert_box, text="⚠️", # Unicode warning symbol as fallback font=('Dongle', 48) ) self.icon_label.place(relx=0.5, rely=0.55, anchor='center') # Start monitoring thread self.monitor_thread = threading.Thread(target=self.monitor_lid, daemon=True) self.monitor_thread.start() def handle_lid_closed(self): """Handle lid closed event""" print("Lid closed detected") if not self._destroyed: self.after(0, self.destroy) self._destroyed = True def monitor_lid(self): """Monitor lid status""" while not self._destroyed: if self.reed_switch.is_pressed: # Magnet detected (lid closed) print("Lid closed detected in monitoring thread") if not self._destroyed: self.after(0, self.destroy) self._destroyed = True break time.sleep(0.1) # Small delay to prevent CPU overuse def cleanup(self): """Cleanup resources""" self._destroyed = True if hasattr(self, 'reed_switch'): self.reed_switch.close()
Editor is loading...
Leave a Comment