import tkinter as tk from app.models.view_models.signup import SignupModel 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) # Error label self.error_var = tk.StringVar() # Variable to store error message self.error_label = tk.Label(form_frame, textvariable=self.error_var, fg="red") self.error_label.grid(row=0, column=0, pady=5, columnspan=2) # Span columns for full width # Left frame for labels label_frame = tk.Frame(form_frame) label_frame.grid(row=1, column=0, pady=5, padx=5, sticky="w") # Right frame for entry widgets entry_frame = tk.Frame(form_frame) entry_frame.grid(row=1, column=1, pady=5, padx=5, sticky="e") # Username Label and Entry self.username_label = tk.Label(label_frame, text="Username:") self.username_label.grid(row=0, column=0, pady=5, sticky="w") self.username_entry = tk.Entry(entry_frame) self.username_entry.grid(row=0, column=0, pady=5, sticky="e") # Email Label and Entry self.email_label = tk.Label(label_frame, text="Email:") self.email_label.grid(row=1, column=0, pady=5, sticky="w") self.email_entry = tk.Entry(entry_frame) self.email_entry.grid(row=1, column=0, pady=5, sticky="e") # Password Label and Entry self.password_label = tk.Label(label_frame, text="Password:") self.password_label.grid(row=2, column=0, pady=5, sticky="w") self.password_entry = tk.Entry(entry_frame, show="*") self.password_entry.grid(row=2, column=0, pady=5, sticky="e") # Signup Button self.signup_button = tk.Button(form_frame, text="Signup", command=self.on_signup) self.signup_button.grid(row=2, column=0, columnspan=2, pady=10) # Span columns for full width form_frame.pack() def on_signup(self): # Retrieve values from entry fields username = self.username_entry.get() email = self.email_entry.get() password = self.password_entry.get() model = SignupModel(username=username, email=email, password=password) validation, errors = model.validate() if not validation: self.error_var.set(errors[0]) self.error_label.grid(row=0, column=0, pady=5) # Print or handle the values as needed print(f"Username: {username}, Email: {email}, Password: {password}")