Создаю систему в tkinter, используя python 3.7 в windows 10, у которой есть два пользователя; пользователь и админ. Вот моя проблема, я хочу получить вошедшего в систему пользователя, чтобы я мог разграничить между пользователем и администратором и отображать различный контент. Я не хочу использовать flask. Другими словами, я ищу эквивалент $ _SESSION [] в php, но теперь для python. Любая помощь будет высоко оценена.
class Mainframe(Tk):
def __init__(self):
Tk.__init__(self)
self.frame = FirstFrame(self)
self.frame.place(relheight=1, relwidth=1)
def change(self, frame):
self.frame.pack_forget() # delete currrent frame
self.frame = frame(self)
self.frame.place(relwidth=1, relheight=1) # make new frame
class LoginFrame(Frame):
def __init__(self, master=None, **kwargs):
Frame.__init__(self, master, **kwargs)
master.title("Enter password")
w = self.winfo_screenwidth()
h = self.winfo_screenheight()
master.geometry("%dx%d+0+0" %(w, h))
self.status =Label(self, fg='red')
self.status.pack()
frame = LabelFrame(self, padx=50, pady=50)
frame.pack(pady=200, padx=50)
uname_lbl = Label(frame, text="Username", font=font17)
uname_lbl.grid(row=0, column=0, padx=10, sticky=W)
self.uname_entry = ttk.Entry(frame, width=20, font=font17)
self.uname_entry.focus()
self.uname_entry.grid(row=0, column=1, pady=5)
pass_lbl =Label(frame, text="Password", font=font17)
pass_lbl.grid(row=1, column=0,padx=10, sticky=W)
self.upass_entry = ttk.Entry(frame, width=20, font=font17, show="*")
self.upass_entry.bind('<Return>', self.check)
self.upass_entry.grid(row=1, column=1, pady=25)
login_btn = Button(frame, text="Login", padx=10, pady=1, width=15, font=font17, bg="magenta", command=self.check)
login_btn.grid(row=2, column=0, columnspan=2)
def check(self, event=None):
username = self.uname_entry.get()
password = self.upass_entry.get()
if username == "" and password == "":
messagebox.showerror("Empty Fields", "Username & Password are required to login!")
return
elif username == "":
messagebox.showerror("Username Required", "Username can't be Empty!")
return
elif password == "":
messagebox.showerror("Password Required", "Password can't be Empty!")
return
else:
pass
# I have class database which contains fetch_agent function
for row in db.fetch_agent(username, password):
uname = row[1]
passwd = row[3]
self.user = row[2]
try:
if(uname != username and passwd != password):
return
except:
messagebox.showerror("Wrong Credentials", "Wrong Password and/or Username!\nCheck your credentials and try \nagain please...")
else:
self.master.change(HomeFrame)
class HomeFrame(Frame):
def __init__(self, master=None, **kwargs):
Frame.__init__(self, master, **kwargs)
master.title("Main application")
w = self.winfo_screenwidth()
h = self.winfo_screenheight()
master.geometry("%dx%d+0+0" %(w, h))
self.add_tab()
def add_tab(self):
self.notebook =ttk.Notebook(self)
self.notebook.pack(expand=1, fill='both')
if user == "admin":
self.tab1 = Menu(self.notebook)
self.tab2 = Check(self.notebook)
self.tab3 = Guests(self.notebook)
self.tab6 = Rooms(self.notebook)
self.tab8 = Utilities(self.notebook)
self.notebook.add(self.tab1, text="Menu", padding=5)
self.notebook.add(self.tab2, text="Checkin", padding=5)
self.notebook.add(self.tab3, text="Guests", padding=5)
self.notebook.add(self.tab6, text="Rooms", padding=5)
self.notebook.add(self.tab8, text="Utilities", padding=5)
else:
self.tab1 = Menu(self.notebook)
self.tab2 = Check(self.notebook)
self.notebook.add(self.tab1, text="Menu", padding=5)
self.notebook.add(self.tab2, text="Checkin", padding=5)
class Menu(Frame):
def __init__(self):
Tk.__init__(self)
self.frame = FirstFrame(self)
self.frame.place(relheight=1, relwidth=1)
# Content for class menu
class Check(Frame):
def __init__(self):
Tk.__init__(self)
self.frame = FirstFrame(self)
self.frame.place(relheight=1, relwidth=1)
# Content for class Check
class Guests(Frame):
def __init__(self):
Tk.__init__(self)
self.frame = FirstFrame(self)
self.frame.place(relheight=1, relwidth=1)
# Content for class guests
class Rooms(Frame):
def __init__(self):
Tk.__init__(self)
self.frame = FirstFrame(self)
self.frame.place(relheight=1, relwidth=1)
# Content for class rooms
class Utilities(Frame):
def __init__(self):
Tk.__init__(self)
self.frame = FirstFrame(self)
self.frame.place(relheight=1, relwidth=1)
# Content for class utilities
app=Mainframe()
app.mainloop()