Untitled
user_3827584
python
3 years ago
13 kB
4
Indexable
from tkinter import * from tkinter import messagebox import os # Constants WINDOW_PAD = 35 # Register and Login Screen (Main Screen) class Main: def __init__(self): self.window = Tk() self.window.title("Your Pocket") self.window.resizable(width=False, height=False) self.window.config(padx=WINDOW_PAD, pady=WINDOW_PAD) # Variables self.temp_name = StringVar() self.temp_username = StringVar() self.temp_age = StringVar() self.temp_gender = StringVar() self.temp_password = StringVar() self.temp_balance = StringVar() self.temp_login_username = StringVar() self.temp_login_password = StringVar() self.register_notif = None self.login_notif = None self.login_screen = None # Menubar self.create_menubar() # Titles self.text_frame = self.create_frame() self.create_title("Your Pocket", ("Calibre", 14)) self.create_title("the money management system", ("Calibre", 12)) # Buttons self.button_frame = self.create_frame(10, 10) self.create_register_button() self.create_login_button() self.window.mainloop() # Create Widget for main def create_menubar(self): menubar = Menu(self.window, relief=FLAT, bd=0) window_menu = Menu(menubar, tearoff=0) window_menu.add_command(label="Register", command=self.register) window_menu.add_separator() window_menu.add_command(label="Login", command=self.login) quit_menu = Menu(menubar, tearoff=0) quit_menu.add_command(label="Quit", command=self.window.quit) menubar.add_cascade(label="Window", menu=window_menu) menubar.add_cascade(label="Exit", menu=quit_menu) self.window.config(menu=menubar) def create_frame(self, x_input=0, y_input=0): frame = Frame(self.window) frame.pack(padx=x_input, pady=y_input, expand=True) return frame def create_title(self, text_input, font_input): label = Label(self.text_frame, text=text_input, font=font_input) label.pack(expand=True) def create_register_button(self): button = Button(self.button_frame, text="Register", font=("Calibre", 12), width=20, command=self.register) button.pack(expand=True) def create_login_button(self): button = Button(self.button_frame, text="Login", font=("Calibre", 12), width=20, command=self.login) button.pack(expand=True) # Functions def finish_reg(self): name = self.temp_name.get() user_name = self.temp_username.get() age = self.temp_age.get() gender = self.temp_gender.get() password = self.temp_password.get() balance = self.temp_balance.get() all_accounts = os.listdir() def show_status(): self.register_notif.grid(row=6, column=0, columnspan=2, sticky="N", pady=1) if name == "" or user_name == "" or age == "" or gender == "" or password == "" or balance == "": self.register_notif.config(fg="red", text="All fields required*") show_status() return if user_name in all_accounts: self.register_notif.config(fg="red", text="Account already exits") show_status() else: with open(user_name, "w") as new_file: new_file.write(name + "\n") new_file.write(user_name + "\n") new_file.write(password + "\n") new_file.write(age + "\n") new_file.write(gender + "\n") new_file.write(balance + "\n") new_file.write("0") self.register_notif.config(fg="green", text="Account has been created") show_status() def login_session(self): all_accounts = os.listdir() login_username = self.temp_login_username.get() login_password = self.temp_login_password.get() def show_status(): self.login_notif.grid(row=4, column=0, columnspan=2, sticky="N", pady=1) for username in all_accounts: if username == login_username: with open(username) as file: file_data = file.read() file_data = file_data.split("\n") password = file_data[2] # Account Dashboard if login_password == password: self.login_screen.destroy() self.window.destroy() Dashboard(file_data[0], username, file_data[3], file_data[4], file_data[5]) return else: self.login_notif.config(fg="red", text="Password incorrect") show_status() return self.login_notif.config(fg="red", text="Account not found") show_status() def register(self): # Register Screen register_screen = Toplevel(self.window) register_screen.title("Register") register_screen.resizable(width=False, height=False) register_screen.config(padx=WINDOW_PAD, pady=WINDOW_PAD) # Frames register_middle = Frame(register_screen) register_middle.grid(row=1, column=0, padx=5, pady=20) # Labels Label(register_screen, text="Enter these following fields*", font=("Calibre", 12)) \ .grid(row=0, column=0, columnspan=2, sticky=N) Label(register_middle, text="Name", font=("Calibre", 12)).grid(row=1, column=0, sticky=E, padx=5) Label(register_middle, text="Username", font=("Calibre", 12)).grid(row=2, column=0, sticky=E, padx=5) Label(register_middle, text="Age", font=("Calibre", 12)).grid(row=3, column=0, sticky=E, padx=5) Label(register_middle, text="Gender", font=("Calibre", 12)).grid(row=4, column=0, sticky=E, padx=5) Label(register_middle, text="Password", font=("Calibre", 12)).grid(row=5, column=0, sticky=E, padx=5) Label(register_middle, text="Current balance", font=("Calibre", 12)).grid(row=6, column=0, sticky=E, padx=5) self.register_notif = Label(register_screen, font=("Calibre", 12)) self.register_notif.grid_remove() # Entries Entry(register_middle, textvariable=self.temp_name).grid(row=1, column=1, padx=5) Entry(register_middle, textvariable=self.temp_username).grid(row=2, column=1, padx=5) Entry(register_middle, textvariable=self.temp_age).grid(row=3, column=1, padx=5) Entry(register_middle, textvariable=self.temp_gender).grid(row=4, column=1, padx=5) Entry(register_middle, textvariable=self.temp_password, show="*").grid(row=5, column=1, padx=5) Entry(register_middle, textvariable=self.temp_balance).grid(row=6, column=1, padx=5) # Button register_enter = Button(register_screen, text="Register", command=self.finish_reg, font=("Calibre", 12)) register_enter.grid(row=5, pady=10, columnspan=2) def login(self): # Login Screen self.login_screen = Toplevel(self.window) self.login_screen.title("Login") self.login_screen.resizable(width=False, height=False) self.login_screen.config(padx=WINDOW_PAD, pady=WINDOW_PAD) # Frames login_middle = Frame(self.login_screen) login_middle.grid(row=1, column=0, padx=5, pady=20) # Labels Label(self.login_screen, text="Login to your account", font=("Calibre", 12)) \ .grid(row=0, column=0, columnspan=2, sticky=N) Label(login_middle, text="Username", font=("Calibre", 12)).grid(row=1, column=0, sticky=E) Label(login_middle, text="Password", font=("Calibre", 12)).grid(row=2, column=0, sticky=E) self.login_notif = Label(self.login_screen, font=("Calibre", 12)) self.login_notif.grid_remove() # Entries Entry(login_middle, textvariable=self.temp_login_username).grid(row=1, column=1, padx=5) Entry(login_middle, textvariable=self.temp_login_password, show="*").grid(row=2, column=1, padx=5) # Button login_enter = Button(self.login_screen, text="Login", command=self.login_session, font=("Calibre", 12)) login_enter.grid(row=3, columnspan=2) # Dashboard class Dashboard: def __init__(self, name, user_name, age, gender, balance): self.window = Tk() self.window.title("Your Pocket") self.window.resizable(width=False, height=False) self.window.config(padx=WINDOW_PAD, pady=WINDOW_PAD) self.window.geometry("650x450") # Variables self.name = name self.user_name = user_name self.age = age self.gender = gender self.balance = balance self.create_menubar() # Titles self.text_frame = self.create_top_frame() self.create_title("Welcome, " + self.user_name, ("Calibre", 14), 0, 0) self.create_title("to Your Pocket ", ("Calibre", 12), 1, 0) # SEP self.create_start_separate() # Details and Functions self.details_frame = self.create_left_frame() self.create_details() self.pocket_function_frame = self.create_right_frame() self.create_pocket_functions() self.window.mainloop() # Create Widget for main # Menubar def create_menubar(self): menubar = Menu(self.window, relief=FLAT, bd=0) quit_menu = Menu(menubar, tearoff=0) quit_menu.add_command(label="Quit", command=self.window.quit) menubar.add_cascade(label="Exit", menu=quit_menu) self.window.config(menu=menubar) # Frames def create_top_frame(self): frame = Frame(self.window) frame.pack(side="top") return frame def create_left_frame(self): frame = Frame(self.window) frame.pack(side="left", expand=True) return frame def create_right_frame(self): frame = Frame(self.window) frame.pack(side="right", expand=True) return frame # Title def create_title(self, text_input, font_input, row_input, column_input): label = Label(self.text_frame, text=text_input, font=font_input) label.grid(row=row_input, column=column_input) return label def create_start_separate(self): separate = Label(self.text_frame, text="=================================================================", font=("Calibre", 8)) separate.grid(row=2, column=0, pady=10) # Details def create_details(self): Label(self.details_frame, text="Current balance: " + self.balance, font=("Calibre", 12, "bold")) \ .grid(row=0, column=0, sticky=E) Label(self.details_frame, text="Name: " + self.name, font=("Calibre", 12)) \ .grid(row=1, column=0, sticky=E) Label(self.details_frame, text="Username: " + self.user_name, font=("Calibre", 12)) \ .grid(row=2, column=0, sticky=E) Label(self.details_frame, text="Age: " + self.age, font=("Calibre", 12)) \ .grid(row=3, column=0, sticky=E) Label(self.details_frame, text="Status: " + ("Can access all" if int(self.age) >= 18 else "Some feature may " "unavailable"), font=("Calibre", 12)).grid(row=4, column=0, sticky=E) Label(self.details_frame, text="Gender: " + self.gender, font=("Calibre", 12)) \ .grid(row=5, column=0, sticky=E) def create_pocket_functions(self): Label(self.pocket_function_frame, text="Pocket Features", font=("Calibre", 12, "bold")) \ .grid(row=0, column=0, sticky=W, pady=10) Button(self.pocket_function_frame, text="Deposit / Withdrawal", font=("Calibre", 12), width=20) \ .grid(row=1, column=0, sticky=W) Button(self.pocket_function_frame, text="Expenses Tracker", font=("Calibre", 12), width=20) \ .grid(row=2, column=0, sticky=W, pady=10) Button(self.pocket_function_frame, text="Currency Converter", font=("Calibre", 12), width=20) \ .grid(row=3, column=0, sticky=W) Button(self.pocket_function_frame, text="Savings", font=("Calibre", 12), width=20) \ .grid(row=4, column=0, sticky=W, pady=10) Button(self.pocket_function_frame, text="Delete Account", font=("Calibre", 12), width=20) \ .grid(row=5, column=0, sticky=W) Main()
Editor is loading...