Untitled
unknown
plain_text
10 months ago
4.2 kB
8
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