login_page.py
~/downloads $ cat login_page.py
import os
from tkinter import *
from tkinter import messagebox
# ---------------- Files ----------------
if not os.path.exists("users.txt"):
open("users.txt", "w").close()
if not os.path.exists("remember.txt"):
open("remember.txt", "w").close()
# ---------------- Placeholder Helpers ----------------
def on_enter(event):
if event.widget.get() == "Username":
event.widget.delete(0, END)
def on_leave(event):
if event.widget.get() == "":
event.widget.insert(0, "Username")
def pass_enter(event):
if event.widget.get() == "Password":
event.widget.delete(0, END)
event.widget.config(show="*")
def pass_leave(event):
if event.widget.get() == "":
event.widget.config(show="")
event.widget.insert(0, "Password")
# ---------------- Registration Window ----------------
def open_registration(event=None):
reg = Toplevel()
reg.title("User Registration")
reg.geometry("600x650")
reg.configure(bg="#007979")
reg.resizable(False, False)
Label(reg, text="User Registration",
font=("Helvetica", 28, "bold"),
bg="#007979", fg="#FFE2AF").pack(pady=20)
fields = [
"Full Name",
"Username",
"Email",
"Phone Number",
"Password",
"Confirm Password"
]
entries = {}
for field in fields:
Label(reg, text=field,
bg="#007979", fg="white",
font=("Arial", 12)).pack(anchor="w", padx=80)
entry = Entry(
reg,
width=30,
font=("Arial", 15),
bg="#FFE2AF",
relief=FLAT,
show="*" if "Password" in field else ""
)
entry.pack(pady=8)
entries[field] = entry
def register_user():
full_name = entries["Full Name"].get().strip()
username = entries["Username"].get().strip()
email = entries["Email"].get().strip()
password = entries["Password"].get()
confirm = entries["Confirm Password"].get()
phone = entries["Phone Number"].get().strip()
if not (full_name and username and email and phone and password and confirm):
messagebox.showerror("Error", "Please fill in all fields.")
return
if "@" not in email or "." not in email:
messagebox.showerror("Error", "Enter a valid email.")
return
if not phone.isdigit() or len(phone) != 10:
messagebox.showerror("Error", "Enter a valid phone number.")
return
if password != confirm:
messagebox.showerror("Error", "Passwords do not match.")
return
# Check if username already exists
with open("users.txt", "r") as f:
for line in f:
parts = line.strip().split(",")
if len(parts) >= 2 and parts[1] == username:
messagebox.showerror("Error", "Username already exists.")
return
with open("users.txt", "a") as f:
f.write(f"{full_name},{username},{email},{phone},{password}\n")
messagebox.showinfo("Success", "Registration successful! You can now log in.")
reg.destroy()
Button(
reg,
text="REGISTER",
font=("Arial", 16, "bold"),
bg="#24B1B1",
fg="white",
bd=0,
width=18,
command=register_user
).pack(pady=30)
# ---------------- Login Window ----------------
class Login_System:
def __init__(self, root):
self.root = root
self.root.title("Login System")
self.root.geometry("1350x700")
self.root.configure(bg="#007979")
Label(
root,
text="User Login Page",
font=("Helvetica", 35, "bold"),
bg="#007979",
fg="#FFE2AF"
).place(x=480, y=50)
# Username
self.usernameentry = Entry(
root,
width=25,
font=("Arial", 20),
bg="#FFE2AF",
fg="#007979",
relief=FLAT
)
self.usernameentry.place(x=450, y=170)
self.usernameentry.insert(0, "Username")
self.usernameentry.bind("<FocusIn>", on_enter)
self.usernameentry.bind("<FocusOut>", on_leave)
# Password
self.passwordentry = Entry(
root,
width=25,
font=("Arial", 20),
bg="#FFE2AF",
fg="#007979",
relief=FLAT
)
self.passwordentry.place(x=450, y=240)
self.passwordentry.insert(0, "Password")
self.passwordentry.bind("<FocusIn>", pass_enter)
self.passwordentry.bind("<FocusOut>", pass_leave)
# Show / Hide Button
self.show = False
def toggle():
if self.show:
self.passwordentry.config(show="*")
btn.config(text="Show")
self.show = False
else:
self.passwordentry.config(show="")
btn.config(text="Hide")
self.show = True
btn = Button(
root,
text="Show",
command=toggle,
bg="#24B1B1",
fg="white",
bd=0,
cursor="hand2",
font=("Arial", 8)
)
btn.place(x=845, y=245)
# Remember Me
self.remember = IntVar()
Checkbutton(
root,
text="Remember Me",
variable=self.remember,
bg="#007979",
fg="white",
selectcolor="#007979"
).place(x=450, y=300)
# Forgot Password
Label(
root,
text="Forgot Password?",
bg="#007979",
fg="#FFE2AF",
cursor="hand2",
font=("Arial", 11, "underline")
).place(x=680, y=300)
# Login Button
Button(
root,
text="LOGIN",
font=("Arial", 18, "bold"),
bg="#24B1B1",
fg="white",
bd=0,
padx=25,
pady=5,
command=self.login
).place(x=570, y=360)
Label(
root,
text="Don't have an account?",
bg="#007979",
fg="white"
).place(x=500, y=440)
register = Label(
root,
text="Register Now",
bg="#007979",
fg="#E37434",
cursor="hand2",
font=("Arial", 11, "bold", "underline")
)
register.place(x=670, y=440)
register.bind("<Button-1>", open_registration)
# Load remembered username, if any
self.load_remembered_user()
def load_remembered_user(self):
with open("remember.txt", "r") as f:
saved_username = f.read().strip()
if saved_username:
self.usernameentry.delete(0, END)
self.usernameentry.insert(0, saved_username)
self.usernameentry.config(fg="#007979")
self.remember.set(1)
def login(self):
username = self.usernameentry.get().strip()
password = self.passwordentry.get()
if username in ("", "Username") or password in ("", "Password"):
messagebox.showerror("Error", "Please enter both username and password.")
return
found = False
with open("users.txt", "r") as f:
for line in f:
parts = line.strip().split(",")
if len(parts) >= 5 and parts[1] == username and parts[4] == password:
found = True
break
if not found:
messagebox.showerror("Error", "Invalid username or password.")
return
# Handle Remember Me
with open("remember.txt", "w") as f:
if self.remember.get():
f.write(username)
else:
f.write("")
messagebox.showinfo("Success", f"Welcome, {username}!")
# ---------------- Main ----------------
if __name__ == "__main__":
root = Tk()
Login_System(root)
root.mainloop()8 views