79 lines
3.3 KiB
Python
79 lines
3.3 KiB
Python
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()
|