import tkinter import tkinter as tk import re class SignupView(tk.Frame): def __init__(self, master=None): super().__init__(master) self.create_widgets() def create_widgets(self): # Create a frame to hold the entry fields and labels form_frame = tk.Frame(self) # Username Label and Entry self.username_label = tk.Label(form_frame, text="Username:") self.username_label.grid(row=0, column=0, pady=5) self.username_entry = tk.Entry(form_frame) self.username_entry.grid(row=0, column=1, pady=5) self.username_error_var = tk.StringVar() # Variable to store error message self.username_error_label = tk.Label(form_frame, textvariable=self.username_error_var, fg="red") # Email Label and Entry self.email_label = tk.Label(form_frame, text="Email:") self.email_label.grid(row=1, column=0, pady=5) self.email_entry = tk.Entry(form_frame) self.email_entry.grid(row=1, column=1, pady=5) self.email_error_var = tk.StringVar() # Variable to store error message self.email_error_label = tk.Label(form_frame, textvariable=self.email_error_var, fg="red") # Password Label and Entry self.password_label = tk.Label(form_frame, text="Password:") self.password_label.grid(row=2, column=0, pady=5) self.password_entry = tk.Entry(form_frame, show="*") # Use show="*" to hide password characters self.password_entry.grid(row=2, column=1, pady=5) self.password_error_var = tk.StringVar() # Variable to store error message self.password_error_label = tk.Label(form_frame, textvariable=self.password_error_var, fg="red") # Signup Button self.signup_button = tk.Button(form_frame, text="Signup", command=self.on_signup) self.signup_button.grid(row=3, column=1, pady=10) self.clear_errors() form_frame.pack() def on_signup(self): self.clear_errors() # Retrieve values from entry fields username = self.username_entry.get() email = self.email_entry.get() password = self.password_entry.get() # Validate username length if len(username) < 8: self.username_error_var.set("Username must be at least 8 characters.") self.username_error_label.grid(row=0, column=3, pady=5, sticky='w') # Validate email format using a simple regex email_pattern = re.compile(r"[^@]+@[^@]+\.[^@]+") if not email_pattern.match(email): self.email_error_var.set("Invalid email format.") self.email_error_label.grid(row=1, column=3, pady=5, sticky='w') # Validate password length and presence of numbers if len(password) < 8: self.password_error_var.set("Password must be at least 8 characters") self.password_error_label.grid(row=2, column=3, pady=5, sticky='w') # Print or handle the values as needed print(f"Username: {username}, Email: {email}, Password: {password}") def clear_errors(self): # Clear all error messages self.username_error_var.set("") self.username_error_label.grid_forget() self.email_error_var.set("") self.email_error_label.grid_forget() self.password_error_var.set("") self.password_error_label.grid_forget()