gui cu modele

This commit is contained in:
andrei-mihnea-cerbu
2024-01-13 01:00:50 +02:00
parent 2a9860ebfa
commit 7eb9cdd70d
8 changed files with 112 additions and 47 deletions
+37 -47
View File
@@ -1,6 +1,6 @@
import tkinter
import tkinter as tk
import re
from app.models.view_models.signup import SignupModel
class SignupView(tk.Frame):
def __init__(self, master=None):
@@ -11,68 +11,58 @@ class SignupView(tk.Frame):
# 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(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")
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(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")
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(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")
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=3, column=1, pady=10)
self.clear_errors()
self.signup_button.grid(row=2, column=0, columnspan=2, pady=10) # Span columns for full width
form_frame.pack()
def on_signup(self):
self.clear_errors()
def on_signup(self):
# 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')
model = SignupModel(username=username, email=email, password=password)
validation, errors = model.validate()
# 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')
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}")
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()