π Simple Login & Registration System in Python Tkinter π±
Demo :
Click Video πππ
✅ Features:
✔️ Simple Login UI π₯️
✔️ Secure User Authentication π
✔️ SQLite Database Integration π
✔️ User Registration Form ✍️
Code :
import tkinter as tk
from tkinter import messagebox
from tkinter import ttk
import sqlite3
# Global variables
root = tk.Tk()
root.withdraw() # Hide main root window
login_window = None
home_window = None
settings_window = None
planner_window = None
# Database setup
def create_db():
conn = sqlite3.connect('user_data.db')
c = conn.cursor()
c.execute('''CREATE TABLE IF NOT EXISTS users (username TEXT, password TEXT)''')
conn.commit()
conn.close()
# User registration
def register_user():
username = reg_username_entry.get()
password = reg_password_entry.get()
if username and password:
conn = sqlite3.connect('user_data.db')
c = conn.cursor()
c.execute("SELECT * FROM users WHERE username=?", (username,))
if c.fetchone():
messagebox.showerror("Error", "Username already exists!")
else:
c.execute("INSERT INTO users (username, password) VALUES (?, ?)", (username, password))
conn.commit()
messagebox.showinfo("Success", "User Registered Successfully!")
register_window.destroy()
open_login()
conn.close()
else:
messagebox.showerror("Error", "Both fields are required!")
# Open Register window
def open_register():
global register_window, reg_username_entry, reg_password_entry
register_window = tk.Toplevel(root)
register_window.title("Register")
register_window.configure(bg='black')
register_window.geometry('400x300')
tk.Label(register_window, text="Username", fg='white', bg='black').pack(pady=10)
reg_username_entry = tk.Entry(register_window)
reg_username_entry.pack(pady=5)
tk.Label(register_window, text="Password", fg='white', bg='black').pack(pady=10)
reg_password_entry = tk.Entry(register_window, show="*")
reg_password_entry.pack(pady=5)
ttk.Button(register_window, text="Register", command=register_user).pack(pady=20)
# Login function
def login():
global login_window
username = username_entry.get()
password = password_entry.get()
if username and password:
conn = sqlite3.connect('user_data.db')
c = conn.cursor()
c.execute("SELECT * FROM users WHERE username=? AND password=?", (username, password))
if c.fetchone():
messagebox.showinfo("Login Successful", "Welcome to the Home Screen!")
login_window.destroy()
open_home_screen()
else:
messagebox.showerror("Login Failed", "Invalid Username or Password")
conn.close()
else:
messagebox.showerror("Error", "Both fields are required!")
# Open Login window
def open_login():
global login_window, username_entry, password_entry
login_window = tk.Toplevel(root)
login_window.title("Login")
login_window.configure(bg='black')
login_window.geometry('400x300')
tk.Label(login_window, text="Username", fg='white', bg='black').pack(pady=10)
username_entry = tk.Entry(login_window)
username_entry.pack(pady=5)
tk.Label(login_window, text="Password", fg='white', bg='black').pack(pady=10)
password_entry = tk.Entry(login_window, show="*")
password_entry.pack(pady=5)
ttk.Button(login_window, text="Login", command=login).pack(pady=20)
ttk.Button(login_window, text="Register", command=open_register).pack(pady=5)
# Open Home Screen
def open_home_screen():
global home_window
if home_window is None or not home_window.winfo_exists():
home_window = tk.Toplevel(root)
home_window.title("Home Screen")
home_window.configure(bg='black')
home_window.geometry('500x400')
tk.Label(home_window, text="Welcome to the Home Screen", fg='white', bg='black', font=('Helvetica', 16, 'bold')).pack(pady=20)
ttk.Button(home_window, text="Settings", command=open_settings).pack(pady=20, ipadx=10, ipady=5)
ttk.Button(home_window, text="Planner", command=open_planner).pack(pady=20, ipadx=10, ipady=5)
# Open Settings
def open_settings():
global settings_window, home_window
if settings_window is None or not settings_window.winfo_exists():
if home_window and home_window.winfo_exists():
home_window.destroy()
settings_window = tk.Toplevel(root)
settings_window.title("Settings")
settings_window.configure(bg='black')
settings_window.geometry('400x300')
def toggle_notification():
if notification_var.get() == 1:
messagebox.showinfo("Notification", "Notifications Enabled!")
else:
messagebox.showinfo("Notification", "Notifications Disabled!")
notification_var = tk.IntVar()
ttk.Checkbutton(settings_window, text="Enable Notifications", variable=notification_var, command=toggle_notification).pack(pady=30)
def close_settings():
settings_window.destroy()
open_home_screen()
ttk.Button(settings_window, text="Back to Home", command=close_settings).pack(pady=20)
# Open Planner
def open_planner():
global planner_window, home_window
if planner_window is None or not planner_window.winfo_exists():
if home_window and home_window.winfo_exists():
home_window.destroy()
planner_window = tk.Toplevel(root)
planner_window.title("Planner")
planner_window.configure(bg='black')
planner_window.geometry('500x300')
tk.Label(planner_window, text="Welcome to Planner! Add your tasks here.", fg='white', bg='black', font=('Helvetica', 14, 'bold')).pack(pady=50)
def close_planner():
planner_window.destroy()
open_home_screen()
ttk.Button(planner_window, text="Back to Home", command=close_planner).pack(pady=20)
# Initialize
create_db()
open_login()
root.mainloop() # Start Tkinter main loop
Comments
Post a Comment