From 2a9860ebfaa123e46ee25807f735584857e89d55 Mon Sep 17 00:00:00 2001 From: andrei-mihnea-cerbu Date: Sat, 13 Jan 2024 00:21:19 +0200 Subject: [PATCH] initial gui --- messenger_gui/app/__init__.py | 2 + messenger_gui/app/main.py | 32 ++++++++++++ messenger_gui/app/models/__init__.py | 0 messenger_gui/app/models/login.py | 0 messenger_gui/app/models/signup.py | 0 messenger_gui/app/views/__init__.py | 0 messenger_gui/app/views/initial.py | 24 +++++++++ messenger_gui/app/views/login.py | 36 +++++++++++++ messenger_gui/app/views/signup.py | 78 ++++++++++++++++++++++++++++ messenger_gui/main.py | 3 ++ 10 files changed, 175 insertions(+) create mode 100644 messenger_gui/app/__init__.py create mode 100644 messenger_gui/app/main.py create mode 100644 messenger_gui/app/models/__init__.py create mode 100644 messenger_gui/app/models/login.py create mode 100644 messenger_gui/app/models/signup.py create mode 100644 messenger_gui/app/views/__init__.py create mode 100644 messenger_gui/app/views/initial.py create mode 100644 messenger_gui/app/views/login.py create mode 100644 messenger_gui/app/views/signup.py create mode 100644 messenger_gui/main.py diff --git a/messenger_gui/app/__init__.py b/messenger_gui/app/__init__.py new file mode 100644 index 0000000..6f6baf2 --- /dev/null +++ b/messenger_gui/app/__init__.py @@ -0,0 +1,2 @@ +from .main import MainApplication +app = MainApplication() \ No newline at end of file diff --git a/messenger_gui/app/main.py b/messenger_gui/app/main.py new file mode 100644 index 0000000..6032e22 --- /dev/null +++ b/messenger_gui/app/main.py @@ -0,0 +1,32 @@ +import tkinter as tk +from app.views.login import LoginView +from app.views.initial import InitialView +from app.views.signup import SignupView + + +class MainApplication(tk.Tk): + def __init__(self): + super().__init__() + + self.title("Messenger App") + + screen_height = self.winfo_screenheight() + self.geometry(f"{screen_height // 2}x{screen_height // 2}") + + # Create instances of the views + self.login_view = LoginView(self) + self.initial_view = InitialView(self) + self.signup_view = SignupView(self) + self.main_view = tk.Label(self, text="Main View") + + self.current_view = None + self.change_view(self.initial_view) + + def change_view(self, view: tk.Frame): + if self.current_view: + self.current_view.pack_forget() + + self.current_view = view + self.current_view.pack(expand=True, fill=tk.BOTH) + self.current_view.place(relx=0.5, rely=0.5, anchor=tk.CENTER) + diff --git a/messenger_gui/app/models/__init__.py b/messenger_gui/app/models/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/messenger_gui/app/models/login.py b/messenger_gui/app/models/login.py new file mode 100644 index 0000000..e69de29 diff --git a/messenger_gui/app/models/signup.py b/messenger_gui/app/models/signup.py new file mode 100644 index 0000000..e69de29 diff --git a/messenger_gui/app/views/__init__.py b/messenger_gui/app/views/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/messenger_gui/app/views/initial.py b/messenger_gui/app/views/initial.py new file mode 100644 index 0000000..19c63b8 --- /dev/null +++ b/messenger_gui/app/views/initial.py @@ -0,0 +1,24 @@ +import tkinter as tk + + +class InitialView(tk.Frame): + def __init__(self, master=None): + super().__init__(master) + self.create_widgets() + + def create_widgets(self): + # Login Button + login_button = tk.Button(self, text="Login", command=self.on_login) + login_button.pack(side=tk.LEFT, padx=5) + + # Sign In Button + signin_button = tk.Button(self, text="Sign In", command=self.on_signin) + signin_button.pack(side=tk.RIGHT, padx=5) + + def on_login(self): + self.master.change_view(self.master.login_view) + + def on_signin(self): + self.master.change_view(self.master.signup_view) + pass + diff --git a/messenger_gui/app/views/login.py b/messenger_gui/app/views/login.py new file mode 100644 index 0000000..634871f --- /dev/null +++ b/messenger_gui/app/views/login.py @@ -0,0 +1,36 @@ +import tkinter as tk + + + +class LoginView(tk.Frame): + def __init__(self, master=None): + super().__init__(master) + self.create_widgets() + + def create_widgets(self): + # Username Label and Entry + username_label = tk.Label(self, text="Username:") + username_label.pack(pady=5) + self.username_entry = tk.Entry(self) + self.username_entry.pack(pady=5) + + # Password Label and Entry + password_label = tk.Label(self, text="Password:") + password_label.pack(pady=5) + self.password_entry = tk.Entry(self, show="*") # Use show="*" to hide password characters + self.password_entry.pack(pady=5) + + # Login Button + login_button = tk.Button(self, text="Submit", command=self.on_login) + login_button.pack(pady=10) + + def on_login(self): + # Retrieve username and password values + username = self.username_entry.get() + password = self.password_entry.get() + + # Example: Check credentials (you'll need to implement your own logic) + if username == "example" and password == "password": + self.master.show_main_view() + else: + print("Invalid credentials") \ No newline at end of file diff --git a/messenger_gui/app/views/signup.py b/messenger_gui/app/views/signup.py new file mode 100644 index 0000000..87658ac --- /dev/null +++ b/messenger_gui/app/views/signup.py @@ -0,0 +1,78 @@ +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() diff --git a/messenger_gui/main.py b/messenger_gui/main.py new file mode 100644 index 0000000..38cb378 --- /dev/null +++ b/messenger_gui/main.py @@ -0,0 +1,3 @@ +from app import app as main_app + +main_app.mainloop()