I’m creating a simple login GUI. I’m trying to make it so that level 3 users can access all requests, level 2 users can only access database and sales related requests, and level 1 users can only access the sale requests.
However, I’m stuck on trying to retrieve the level info and using it in the if- else statement.
def database_request():
level=level.get()
if level.get() >= "2":
login_success_screen.destroy()
login_success_screen.update()
else:
Label(login_success_screen, text="Access Denied", fg="gray", bg="white", font=("times new roman", 12)).pack()
os.remove(username_info)
Full code:
import tkinter as tk
from tkinter import messagebox
import os
from PIL import Image, ImageTk
class Window(Frame):
def __init__(self,root):
Frame.__init__(self,root)
self.root=root
self.pack(fill=BOTH, expand=1)
self.root.wm_title("Login")
self.root.geometry("1202x632")
self.root.resizable(False,False)
global username_verify
global passcode_verify
global level_verify
username_verify=StringVar()
passcode_verify=StringVar()
level_verify=StringVar()
global username_entry
global passcode_entry
global level_entry
load=Image.open("books.png")
render=ImageTk.PhotoImage(load)
img=Label(self, image=render)
img.image=render
img.place(x=0, y=0)
Frame_login=Frame(self.root,bg="white",highlightbackground="#c4652b",highlightthickness=5)
Frame_login.place(x=150,y=150,height=340,width=500)
title=Label(Frame_login,text="Login Here", font=("Impact",35,"bold"),fg="#d77337",bg="white").place(x=72,y=20)
desc=Label(Frame_login,text="Staff Login Gate", font=("Goudy old style",15,"bold"),fg="#d25d17",bg="white").place(x=72,y=80)
lbl_user=Label(Frame_login,text="Username", font=("goudy old style",15,"bold"),fg="gray",bg="white").place(x=72,y=110)
self.txt_user=Entry(Frame_login,textvariable=username_verify,font=("times new roman",15),bg="lightgray")
self.txt_user.place(x=72,y=140,width=350,height=35)
lbl_passcode=Label(Frame_login,text="Passcode", font=("Goudy old style",15,"bold"),fg="gray",bg="white").place(x=72,y=180)
self.txt_passcode=Entry(Frame_login,textvariable=passcode_verify,show='*',font=("times new roman",15),bg="lightgray")
self.txt_passcode.place(x=72,y=208,width=350,height=35)
def login_success():
global login_success_screen
login_success_screen=Toplevel(Frame_login)
login_success_screen.title("User Action Gate")
login_success_screen.geometry("500x340")
login_success_screen.resizable(False,False)
login_success_screen.configure(bg="white")
login_success_screen.configure(highlightbackground="#c4652b")
login_success_screen.configure(highlightthickness=5)
result.config(text="")
title=Label(login_success_screen,text="Login Successful", font=("Impact",35,"bold"),fg="#d77337",bg="white").place(x=72,y=20)
desc=Label(login_success_screen,text="User Action Gate", font=("Goudy old style",15,"bold"),fg="#d25d17",bg="white").place(x=72,y=80)
def sales_request():
login_success_screen.destroy()
login_success_screen.update()
def database_request():
level=level.get()
if level.get() >= "2":
login_success_screen.destroy()
login_success_screen.update()
else:
Label(login_success_screen, text="Access Denied", fg="gray", bg="white", font=("times new roman", 12)).pack()
Sales_button=Button(login_success_screen,command=sales_request,text="Request Sales (1)",fg="white",bg="#d77337",bd=0,font=("times new roman",20,"bold")).place(x=72,y=120,width=345)
Database_button=Button(login_success_screen,command=database_request,text="Request Database (2)",fg="white",bg="#d77337",bd=0,font=("times new roman",20,"bold")).place(x=72,y=185,width=345)
Staff_button=Button(login_success_screen,text="Request Staff (3)",fg="white",bg="#d77337",bd=0,font=("times new roman",20,"bold")).place(x=72,y=250,width=345)
def passcode_not_recognised():
result.config(text="Login Unsuccessful: Passcode Not Recognised", fg="red")
def user_not_found():
result.config(text="Login Unsuccessful: User Not Found", fg="red")
result = Label(Frame_login, bg="white", font=("times new roman", 12))
result.pack()
def delete_login_success():
login_success_screen.destroy()
def delete_passcode_not_recognised():
passcode_not_recog_screen.destroy()
def delete_user_not_found_screen():
user_not_found_screen.destroy()
def login_verify():
username1=username_verify.get()
passcode1=passcode_verify.get()
level1=level_verify.get()
list_of_files=os.listdir()
if username1 in list_of_files:
file1=open(username1, "r")
verify=file1.read().splitlines()
if passcode1 in verify:
login_success()
else:passcode_not_recognised()
else:user_not_found()
def create_registration():
top = tk.Toplevel(root)
top.title("Registration")
top.geometry("500x450")
top.resizable(False,False)
top.configure(bg="white")
top.configure(highlightbackground="#c4652b")
top.configure(highlightthickness=5)
global username
global passcode
global level
global username_entry
global passcode_entry
global level_entry
username=StringVar()
passcode=StringVar()
title=Label(top,text="Register Here", font=("Impact",35,"bold"),fg="#d77337",bg="white").place(x=72,y=20)
desc=Label(top,text="User Registration Area", font=("Goudy old style",15,"bold"),fg="#d25d17",bg="white").place(x=72,y=80)
lbl_user=Label(top,text="Username", font=("goudy old style",15,"bold"),fg="gray",bg="white").place(x=72,y=110)
self.txt_user=Entry(top,textvariable=username,font=("times new roman",15),bg="lightgray")
self.txt_user.place(x=72,y=140,width=350,height=35)
lbl_passcode=Label(top,text="Passcode", font=("Goudy old style",15,"bold"),fg="gray",bg="white").place(x=72,y=180)
self.txt_passcode=Entry(top,textvariable=passcode,show='*',font=("times new roman",15),bg="lightgray")
self.txt_passcode.place(x=72,y=208,width=350,height=35)
lbl_level=Label(top,text="Level", font=("Goudy old style",15,"bold"),fg="gray",bg="white").place(x=72,y=250)
level = StringVar(top)
level.set("")
w = OptionMenu(top, level, "1", "2", "3")
w.pack()
w.place(x=72,y=280)
w.configure(bd=0)
def register_user():
username_info = username.get()
passcode_info = passcode.get()
level_info = level.get()
if level_info and username_info and passcode_info:
if os.path.exists(username_info):
result.config(text="Registration Unsuccessful: User Already Exists", fg="red")
else:
with open(username_info, "w") as f:
f.write("n".join([username_info, passcode_info, level_info]))
result.config(text="Registration Successful", fg="green")
else:
result.config(text="Registration Unsuccessful: Please Input All Information", fg="red")
result = Label(top, bg="white", font=("times new roman", 12))
result.pack()
Submit_button=Button(top,command=register_user,text="Submit",fg="white",bg="#d77337",bd=0,font=("times new roman",20,"bold")).place(x=72,y=320,width=180)
def quit():
top.destroy()
top.update()
Back_button=Button(top,command=quit,text="Back to Home",bg="white",fg="#d77337",bd=0,font=("times new roman",12)).place(x=72,y=380)
Register_button=Button(Frame_login,command=create_registration,text="Register New Account",bg="white",fg="#d77337",bd=0,font=("times new roman",12)).place(x=72,y=248)
Login_button=Button(self.root,command=login_verify,text="Login",fg="white",bg="#d77337",bd=0,font=("times new roman",20,"bold")).place(x=310,y=460,width=180)
root = Tk()
app = Window(root)
root.mainloop()
If possible, please provide some examples.
Advertisement
Answer
You need to save the user level from the user credential file before executing login_success() inside login_verify() function:
def login_verify():
username1 = username_verify.get()
passcode1 = passcode_verify.get()
if os.path.exists(username1):
with open(username1) as file1:
credentials = file1.read().splitlines()
if passcode1 in credentials:
self.user_level = credentials[-1] # save user level
login_success()
else:
passcode_not_recognised()
else:
user_not_found()
Then using this user level in database_request() function:
def database_request():
if self.user_level >= "2":
login_success_screen.destroy()
login_success_screen.update()
else:
access.config(text="Access Denied")