Untitled
unknown
plain_text
a year ago
8.2 kB
5
Indexable
class WifiConfigurationScreen(ctk.CTkToplevel):
def __init__(self, parent, dark_mode: bool, language='EN'):
super().__init__(parent)
self._is_destroyed = False
self.bind("<Destroy>", self._on_destroy)
# 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 and theme colors based on dark mode
self.dark_mode = dark_mode
bg_color = '#1c1c1e' if dark_mode else '#f5f5f7'
text_color = 'white' if dark_mode else 'black'
button_color = '#2c2c2e' if dark_mode else '#e5e5e7'
button_hover = '#3a3a3c' if dark_mode else '#d1d1d6'
self.configure(fg_color=bg_color)
# Variables initialization
self.networks = []
self.selected_network = StringVar()
self.password = StringVar()
self.show_password = ctk.BooleanVar(value=False)
self.keyboard_visible = False
self.current_connection = {
"SSID": "Not connected",
"Signal Strength": "N/A",
"IP Address": "N/A"
}
self.status_message = StringVar(value="Loading... Please wait")
# Load icons for password visibility toggle with correct theme
icon_suffix = "-w" if dark_mode else "-b"
self.show_icon = ctk.CTkImage(
light_image=Image.open(f"icons/eye{icon_suffix}.png"),
dark_image=Image.open(f"icons/eye{icon_suffix}.png"),
size=(20, 20)
)
self.hide_icon = ctk.CTkImage(
light_image=Image.open(f"icons/eye-off{icon_suffix}.png"),
dark_image=Image.open(f"icons/eye-off{icon_suffix}.png"),
size=(20, 20)
)
# Create base container
self.base_container = ctk.CTkFrame(self, fg_color=bg_color, border_width=0)
self.base_container.pack(fill="both", expand=True)
# Create main container
self.main_container = ctk.CTkFrame(self.base_container, fg_color=bg_color, border_width=0)
self.main_container.pack(fill="both", expand=True)
# Create UI Elements with theme-aware colors
self.create_widgets(text_color, button_color, button_hover)
self.scan_wifi_networks()
self.update_current_connection()
# Create close button with theme-aware colors
self.close_button = ctk.CTkButton(
self,
text="×",
width=50,
height=50,
command=self.destroy,
fg_color='#ff3b30',
hover_color='#ff453a',
font=("Arial", 24, "bold")
)
self.close_button.place(relx=0.98, rely=0.02, anchor="ne")
self.close_button.lift()
# Bind click outside password entry to hide keyboard
self.bind('<Button-1>', self.check_hide_keyboard)
def create_widgets(self, text_color, button_color, button_hover):
# Top section
self.top_frame = ctk.CTkFrame(self.main_container, fg_color="transparent")
self.top_frame.pack(fill="x", padx=20, pady=(40, 0))
# Title and Status with theme-aware colors
title_label = ctk.CTkLabel(
self.top_frame,
text="Wi-Fi Configurator",
font=("Arial", 28, "bold"),
text_color=text_color
)
title_label.pack(pady=(5, 0))
self.status_label = ctk.CTkLabel(
self.top_frame,
textvariable=self.status_message,
font=("Arial", 14),
text_color=text_color
)
self.status_label.pack(pady=(0, 5))
# Content section
self.content_frame = ctk.CTkFrame(self.main_container, fg_color="transparent")
self.content_frame.pack(fill="both", expand=True, padx=20, pady=(0, 100))
# Network selection
network_label = ctk.CTkLabel(
self.content_frame,
text="Select Network:",
font=("Arial", 14),
text_color=text_color
)
network_label.pack(pady=(10, 0))
self.network_dropdown = ctk.CTkOptionMenu(
self.content_frame,
variable=self.selected_network,
values=self.networks,
width=250,
height=35,
fg_color=button_color,
button_color=button_hover,
button_hover_color=button_hover,
text_color=text_color
)
self.network_dropdown.pack(pady=(0, 5))
# Password entry
password_label = ctk.CTkLabel(
self.content_frame,
text="Password:",
font=("Arial", 14),
text_color=text_color
)
password_label.pack(pady=(5, 0))
# Password container
password_container = ctk.CTkFrame(self.content_frame, fg_color="transparent")
password_container.pack(pady=(0, 5))
self.password_entry = ctk.CTkEntry(
password_container,
textvariable=self.password,
show="*",
width=250,
height=35,
fg_color=button_color,
text_color=text_color
)
self.password_entry.pack(side="left", padx=(0, 5))
self.toggle_password_btn = ctk.CTkButton(
password_container,
text="",
image=self.show_icon,
width=35,
height=35,
fg_color=button_color,
hover_color=button_hover,
command=self.toggle_password_visibility
)
self.toggle_password_btn.pack(side="left")
# Action buttons
button_frame = ctk.CTkFrame(self.content_frame, fg_color="transparent")
button_frame.pack(pady=(5, 10))
ctk.CTkButton(
button_frame,
text="Connect",
command=self.start_connecting_to_wifi,
width=100,
height=35,
fg_color=button_color,
hover_color=button_hover,
text_color=text_color
).grid(row=0, column=0, padx=5)
ctk.CTkButton(
button_frame,
text="Refresh",
command=self.scan_wifi_networks,
width=100,
height=35,
fg_color=button_color,
hover_color=button_hover,
text_color=text_color
).grid(row=0, column=1, padx=5)
# Connection info
self.connection_frame = ctk.CTkFrame(self.content_frame, fg_color="transparent")
self.connection_frame.pack(fill="x", pady=(0, 10))
self.ssid_label = ctk.CTkLabel(
self.connection_frame,
text="SSID: Not connected",
font=("Arial", 12),
text_color=text_color
)
self.ssid_label.pack(pady=1)
self.signal_label = ctk.CTkLabel(
self.connection_frame,
text="Signal Strength: N/A",
font=("Arial", 12),
text_color=text_color
)
self.signal_label.pack(pady=1)
self.ip_label = ctk.CTkLabel(
self.connection_frame,
text="IP Address: N/A",
font=("Arial", 12),
text_color=text_color
)
self.ip_label.pack(pady=1)
# Keyboard container
self.keyboard_frame = ctk.CTkFrame(self.main_container, fg_color="transparent")
self.keyboard = TouchKeyboard(
self.keyboard_frame,
self.password_entry,
self.hide_keyboard,
fg_color="transparent"
)
self.keyboard.pack(pady=(0, 20))
# Bind keyboard events
self.password_entry.bind("<Button-1>", self.show_keyboard)
self.password_entry.bind("<FocusIn>", self.show_keyboard)
# [Rest of the methods remain the same]Editor is loading...
Leave a Comment