Untitled
unknown
plain_text
7 months ago
5.5 kB
3
Indexable
class WiFiDiagnosticsScreen(ctk.CTkToplevel): def __init__(self, parent, dark_mode: bool, language: str): super().__init__(parent) self.diagnostics = WiFiDiagnostics() self.dark_mode = dark_mode self.language = language # Make it fullscreen self.overrideredirect(True) self.geometry(f"{self.winfo_screenwidth()}x{self.winfo_screenheight()}+0+0") bg_color = '#1c1c1e' if dark_mode else '#f5f5f7' accent_color = '#2c2c2e' if dark_mode else '#e5e5e7' text_color = 'white' if dark_mode else 'black' self.configure(fg_color=bg_color) # Header with title and close button header = ctk.CTkFrame(self, fg_color=bg_color, height=50) header.pack(fill='x', padx=20, pady=(20,10)) title = ctk.CTkLabel( header, text=TRANSLATIONS[language]['wifi_diagnostics'], font=("Dongle", 24, "bold"), text_color=text_color ) title.pack(side='left') close_btn = ctk.CTkButton( header, text="×", width=40, height=40, font=("Dongle", 20), fg_color=accent_color, hover_color='#3a3a3c' if dark_mode else '#d1d1d6', command=self.destroy ) close_btn.pack(side='right') # Two column layout columns = ctk.CTkFrame(self, fg_color=bg_color) columns.pack(fill='both', expand=True, padx=20, pady=10) # Left status panel self.status_panel = ctk.CTkFrame( columns, fg_color=accent_color, corner_radius=10, width=300 ) self.status_panel.pack(side='left', fill='y', padx=(0,10)) # Status info self.network_label = ctk.CTkLabel( self.status_panel, text="-", font=("Dongle", 16), text_color=text_color ) self.network_label.pack(pady=10) self.status_value = ctk.CTkLabel( self.status_panel, text=TRANSLATIONS[self.language]['wifi_disconnected'], font=("Dongle", 16), text_color='#ff453a' ) self.status_value.pack(pady=10) # Network list self.network_list = ctk.CTkScrollableFrame( columns, fg_color=accent_color, corner_radius=10 ) self.network_list.pack(side='left', fill='both', expand=True) # Start monitoring and scan self.diagnostics.start_monitoring(self.update_status) self.scan_networks() def scan_networks(self): try: result = subprocess.run(['sudo', 'iwlist', 'wlan0', 'scan'], capture_output=True, text=True) networks = [] seen_ssids = set() # Track seen SSIDs for line in result.stdout.split('\n'): if 'ESSID:' in line: ssid = line.split('ESSID:"')[1].split('"')[0] if ssid and ssid not in seen_ssids: # Only add if not seen before networks.append({'ssid': ssid}) seen_ssids.add(ssid) self._update_network_list(networks) except Exception as e: print(f"Scan error: {e}") # Schedule next scan self.after(30000, self.scan_networks) def _update_network_list(self, networks): # Clear existing list for widget in self.network_list.winfo_children(): widget.destroy() current_network = self.diagnostics.get_current_network() for network in networks: ssid = network['ssid'] is_current = ssid == current_network btn = ctk.CTkButton( self.network_list, text=ssid + (" (Connected)" if is_current else ""), font=("Dongle", 16), height=40, fg_color='#34c759' if is_current else '#3a3a3c' if self.dark_mode else '#d1d1d6', hover_color='#32b357' if is_current else '#34c759', text_color='white' if self.dark_mode else 'black', command=lambda s=ssid: self.show_connection_screen(s) ) btn.pack(fill='x', pady=2, padx=5) def update_status(self, status): try: if status['network']: self.network_label.configure(text=status['network']) self.status_value.configure( text=TRANSLATIONS[self.language]['wifi_connected'], text_color='#34c759' ) else: self.network_label.configure(text="-") self.status_value.configure( text=TRANSLATIONS[self.language]['wifi_disconnected'], text_color='#ff453a' ) except tk.TclError: pass # Widget was destroyed def show_connection_screen(self, network_ssid): ConnectionScreen(self, network_ssid, self.dark_mode, self.language)
Editor is loading...
Leave a Comment