I have been currently stuck on an issue for weeks in regards to tkinter user entries. I have built out an application that contains multiple files.
File 1: RegisterPage.py
File 2: LoginPage.py
File 3: AccountPage.py
File 4: PersonalPage.py
File 5: Database.py (Psuedo database. Using path and os.listdir() for user file entries. Creates a .txt file that has the user's entries(firstname,lastname, contact, email, password) that were provided during RegisterPage.py.
LoginPage.py
from tkinter import Frame, Label, Entry, Button, messagebox
import tkinter as tk
MEDIUM_FONT = ("Times New Roman", 15, "bold")
class Login(tk.Frame):
def __init__(self, master):
tk.Frame.__init__(self, master)
self.root = master
self.root.geometry("1250x700+0+0")
frame2 = Frame(self.root, bg='white')
frame2.place(x=480, y=100, width=700, height=500)
Label(frame2, text="EMAIL ADDRESS", font=MEDIUM_FONT, bg='white', fg='gray').place(x=50, y=150)
self.email = Entry(frame2, font=MEDIUM_FONT, bg='lightgray')
self.email.place(x=50, y=180, width=200)
Label(frame2, text="Password", font=MEDIUM_FONT, bg='white', fg='gray').place(x=50, y=250)
self.txt_password = Entry(frame2, font=MEDIUM_FONT, bg='lightgray', show='*')
self.txt_password.place(x=50, y=280, width=200)
Button(frame2, text="Sign In", bd=0, cursor='hand2',
command=lambda: self.master.switch_frame("PersonalPage")).place(x=250, y=430, width=180)
def login(self):
fields = [self.email.get(),
self.txt_password.get()]
for entries in fields:
if entries == "":
messagebox.showerror("Error", "All Fields Are Required", parent=self.root)
return
if self.database.login_check(self.email.get(), self.txt_password.get()):
messagebox.showinfo("Success", "Logged In", parent=self.root)
self.master.switch_frame("AccountPage")
return
messagebox.showinfo("Error", "Email or Password Does Not Match", parent=self.root)
return
PersonalPage.py
from tkinter import Frame, Label
import tkinter as tk
MEDIUM_FONT = ("Times New Roman", 15, "bold")
class PersonalDetails(tk.Frame):
def __init__(self, master):
tk.Frame.__init__(self, master)
self.root = master
self.root.title("Personal Details")
self.root.geometry("1250x700+0+0")
self.root.config(bg='white')
frame3 = Frame(self.root, bg='white')
frame3.place(x=480, y=100, width=700, height=500)
Label(frame3, text="Email", font=MEDIUM_FONT, bg='white', fg='gray').place(x=50, y=350)
Label(frame3, textvariable='', font=MEDIUM_FONT)
Controller.py. (python3 Controller.py) to run program
import tkinter as tk
from LoginPage import Login
from PersonalPage import PersonalDetails
pages = {
"LoginPage": Login,
"PersonalPage": PersonalDetails
}
class Controller(tk.Tk):
def __init__(self):
tk.Tk.__init__(self)
self._frame = None
self.switch_frame("LoginPage")
def switch_frame(self, page_name):
cls = pages[page_name]
new_frame = cls(master=self)
if self._frame is not None:
self._frame.destroy()
self._frame = new_frame
self._frame.place()
if __name__ == '__main__':
app = Controller()
app.mainloop()
How would I be able to display the LOGGED IN User's personal details in PersonaPage.py after User successfully matched the email and password lines located in his distinct .txt file in the "Accounts Directory"? I am not sure how to bridge that connection between LoginPage.py and PersonalPage.py. Do I need to provide a unique identifier in LoginPage.py?
AccountPage.py is more of a "middle-man-frame" ,with a button that switches the frame to PersonalPage.py, between LoginPage.py and PersonalPage.py.