Я новичок в python/tkinter. В настоящее время я работаю над школьным проектом по созданию экрана входа в систему. Если имя пользователя и пароль существуют в файле data.dat, откроется экран главного меню, в противном случае появится сообщение об ошибке. Пока я могу только заставить систему распознавать первое имя пользователя и пароль в первой строке файла data.dat. Если я попытаюсь ввести любую другую комбинацию имени пользователя и пароля, моя программа вылетает без каких-либо сообщений об ошибках, уведомляющих меня об ошибке. Я предполагаю, что это логическая ошибка, но я просто не вижу ее. Ценю любую помощь...
деф ЛогинЭкран():
def login():
username=usname.get()
passwd=password.get()
flag=False
if username.strip() == "" and passwd.strip() == "":
messagebox.showinfo("Error","Blank username and password")
elif passwd.strip() == "":
messagebox.showinfo("Error","Blank password")
elif username.strip()== "":
messagebox.showinfo("Error","Blank username")
else:
LoginFile=open("data.dat","r")
for line in LoginFile:
while flag ==False:
if username and passwd in line:
messagebox.showinfo("Authenticated","Correct username and password" )
flag=True
else:
flag =False
if flag == False:
messagebox.showerror("Error", "Inorrect username and password")
loginwindow.destroy()
MainMenu()
loginwindow=Tk()
loginwindow.title("Log In Screen")
loginwindow.geometry("200x200")
lbluname=Label(loginwindow, text="Username")
usname=Entry(loginwindow)
lblpass=Label(loginwindow, text="Password")
password=Entry(loginwindow)
lbluname.pack()
usname.pack()
lblpass.pack()
password.pack()
btn=Button(loginwindow,text="Log In",command=login).pack()
Решение проблемы
Вы должны использовать контекстный менеджер, такой как «with open()», когда вы хотите прочитать файл, чтобы он закрылся без явного вызова. Однако вы должны иметь возможность просто открыть и проверить файл на наличие имени пользователя и пароля. Я проверил это, используя pathlib с файлом.dat, и он отлично работает. Посмотрите, может ли это вам помочь.
import tkinter as tk
from pathlib import Path
def login_verify():
username = admin_username_verify.get()# get info from field
password = admin_password_verify.get()# get info from field
username_entry.delete("0", tk.END) # delete info after button press
password_entry.delete("0", tk.END)# delete info after button press
file = "data.dat" # file name
nothing = "" # use to check empty field
if username!= nothing and password!= nothing: # check if the fields are empty
if username in Path(file).read_text() and password in Path(file).read_text(): #use pathlib to open and check file contents
print("Access Granted")
else:
print("Incorrect Username/Password combination")
else:
print("Invalid Credentials")
root = tk.Tk()
root.geometry("800x800")
root.title("Administrator Login")
admin_username_verify = tk.StringVar()
admin_password_verify = tk.StringVar()
login_label = tk.Label(root, text="Please enter details below to login", font="Times 12 bold")
login_label.pack()
user_name_label = tk.Label(root, text="Username *", font="Times 10 bold")
user_name_label.pack(pady=2)
username_entry = tk.Entry(root, textvariable=admin_username_verify, font="Times 12")
username_entry.pack()
password_label = tk.Label(root, text="Password *", font="Times 10 bold")
password_label.pack()
password_entry = tk.Entry(root, text=admin_password_verify, show="*", font="Times 12")
password_entry.pack()
login_button = tk.Button(root, text="Login", bg="blue", fg="white", width=10,
command= login_verify)
login_button.pack(pady=5)
root.mainloop()
Комментариев нет:
Отправить комментарий