[英]Python Login verification (Tkinter )
The error I get while running the code below is that it only prints the last else statement even if the parameters for login are correct.我在运行下面的代码时遇到的错误是,即使登录参数正确,它也只会打印最后一个 else 语句。 I don't know what is causing the error so I have decided to copy and paste my whole code
我不知道是什么导致了错误,所以我决定复制并粘贴我的整个代码
from Tkinter import *
def submit_btn():
file = open("clientinfo.txt", "a")
file.write(f"{user_entery.get(), pass_entery.get()}\n")
file.close()
user_entery.delete(0, END)
pass_entery.delete(0, END)
Label(screen1, text=" ").pack()
Label(screen1, text="Succsefuly Registered ", fg = "green", font = ("Airel", 12)).pack()
def register():
global screen1
screen1 = Toplevel(screen)
screen1.title("Register")
screen1.geometry("400x300")
global user_entery
global pass_entery
username = StringVar()
password = StringVar()
Label(screen1, text="Please enter the required fields ").pack()
Label(screen1, text=" ").pack()
Label(screen1, text="Username:").pack()
user_entery = Entry(screen1, textvariable = username)
user_entery.pack()
Label(screen1, text="Password *").pack()
pass_entery = Entry(screen1, textvariable = password)
pass_entery.pack()
Label(screen1, text=" ").pack()
Button(screen1, text = "Submit", width=15 , height=1, command = submit_btn).pack()
def verify_login():
username2 = verify_user.get()
password2 = verify_pass.get()
print(username2)
print(password2)
user_entery2.delete(0, END)
pass_entery2.delete(0, END)
file2 = open("clientinfo.txt")
text = file2.readlines()
if username2 in text:
verify=file2.read().splitlines()
if password2 in verify:
print("Succses")
else:
print("pass failed")
else:
print("user failed")
def login():
global screen2
screen2 = Toplevel(screen)
screen2.title("Login")
screen2.geometry("400x300")
Label(screen2, text="Enter your Username and Password to Login").pack()
Label(screen2, text=" ").pack()
global verify_user
global verify_pass
global user_entery2
global pass_entery2
verify_user= StringVar()
verify_pass= StringVar()
Label(screen2, text="Username:").pack()
user_entery2 = Entry(screen2, textvariable = verify_user)
user_entery2.pack()
Label(screen2, text=" ").pack()
Label(screen2, text="Password:").pack()
pass_entery2 = Entry(screen2, show='*', textvariable = verify_pass)
Label(screen2, text=" ").pack()
pass_entery2.pack()
Label(screen2, text=" ").pack()
Button(screen2, text = "Login", width = 15, height=1, command= verify_login).pack()
def sign_in_screen():
global screen
screen = Tk()
screen.geometry("400x300")
screen.title("Login/Register")
Label(text="Movie booking", bg="grey", width = "300", height= "2", font = ("Airel", 13)).pack()
Label(text="").pack()
Button(text="Login", height="2", width="30", command=login).pack()
Label(text="").pack()
Button(text="Register", height="2", width="30", command=register).pack()
screen.mainloop()
def run_function():
sign_in_screen()
run_function()
Have a look at this part of code:看看这部分代码:
def verify_login():
text = file2.readlines()
if username2 in text:
#[...]
else:
#[...]
.readlines()
returns a list of lines in the specified .txt
file. .readlines()
返回指定.txt
文件中的行列表。
So if you register with say username = username1
and passowrd = password1
and one more time with username = username2
and passowrd = password2
, so your clientinfo.txt
will look somewhat like this:因此,如果您使用 username =
username1
和 passowrd = password1
进行注册,然后再使用 username = username2
和 passowrd = password2
进行注册,那么您的clientinfo.txt
将看起来像这样:
('username1', 'password1')
('username2', 'password2')
and the variable text
will hold the value并且变量
text
将保存该值
["('username1', 'password1')\n", "('username2', 'password2')\n"]
So in order to check for the username and password you need to use a for loop因此,为了检查用户名和密码,您需要使用for 循环
def verify_login():
#[...]
count = 0
for data in text:
if data.startswith(f"('{username2}',"):
count += 1
if data == f"{username2,password2}\n":
print("Success")
break
else:
print("pass failed")
if count == 0: #If there are no users with name specified this line will get executed
print("user failed")
Here's the final working code:这是最终的工作代码:
from tkinter import *
def submit_btn():
file = open("clientinfo.txt", "a")
file.write(f"{user_entery.get(), pass_entery.get()}\n")
file.close()
user_entery.delete(0, END)
pass_entery.delete(0, END)
Label(screen1, text=" ").pack()
Label(screen1, text="Succsefuly Registered ", fg = "green", font = ("Airel", 12)).pack()
def register():
global screen1
screen1 = Toplevel(screen)
screen1.title("Register")
screen1.geometry("400x300")
global user_entery
global pass_entery
username = StringVar()
password = StringVar()
Label(screen1, text="Please enter the required fields ").pack()
Label(screen1, text=" ").pack()
Label(screen1, text="Username:").pack()
user_entery = Entry(screen1, textvariable = username)
user_entery.pack()
Label(screen1, text="Password *").pack()
pass_entery = Entry(screen1, textvariable = password)
pass_entery.pack()
Label(screen1, text=" ").pack()
Button(screen1, text = "Submit", width=15 , height=1, command = submit_btn).pack()
def verify_login():
username2 = verify_user.get()
password2 = verify_pass.get()
print(username2)
print(password2)
user_entery2.delete(0, END)
pass_entery2.delete(0, END)
file2 = open("clientinfo.txt")
text = file2.readlines()
print(text)
count = 0
for data in text:
if data.startswith(f"('{username2}',"):
count += 1
if data == f"{username2,password2}\n":
print("Success")
break
else:
print("pass failed")
if count == 0: #If there are no users with name specified this line will get executed
print("user failed")
def login():
global screen2
screen2 = Toplevel(screen)
screen2.title("Login")
screen2.geometry("400x300")
Label(screen2, text="Enter your Username and Password to Login").pack()
Label(screen2, text=" ").pack()
global verify_user
global verify_pass
global user_entery2
global pass_entery2
verify_user= StringVar()
verify_pass= StringVar()
Label(screen2, text="Username:").pack()
user_entery2 = Entry(screen2, textvariable = verify_user)
user_entery2.pack()
Label(screen2, text=" ").pack()
Label(screen2, text="Password:").pack()
pass_entery2 = Entry(screen2, show='*', textvariable = verify_pass)
Label(screen2, text=" ").pack()
pass_entery2.pack()
Label(screen2, text=" ").pack()
Button(screen2, text = "Login", width = 15, height=1, command= verify_login).pack()
def sign_in_screen():
global screen
screen = Tk()
screen.geometry("400x300")
screen.title("Login/Register")
Label(text="Movie booking", bg="grey", width = "300", height= "2", font = ("Airel", 13)).pack()
Label(text="").pack()
Button(text="Login", height="2", width="30", command=login).pack()
Label(text="").pack()
Button(text="Register", height="2", width="30", command=register).pack()
screen.mainloop()
def run_function():
sign_in_screen()
run_function()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.