Python 检查文本文件中的用户ID、密码时登录验证失败
我目前正在制作一个带有登录验证的python GUI。我正在使用文本文件验证登录详细信息。当我尝试将userid和密码与文件中的数据进行比较时,它进入else条件并打印Python 检查文本文件中的用户ID、密码时登录验证失败,python,Python,我目前正在制作一个带有登录验证的python GUI。我正在使用文本文件验证登录详细信息。当我尝试将userid和密码与文件中的数据进行比较时,它进入else条件并打印“Fail” 我正在为GUI使用tkinter,但登录详细信息不起作用 from tkinter import * def verify_login(): file = open("login.txt","r") for row in file: field
“Fail”
我正在为GUI使用tkinter,但登录详细信息不起作用
from tkinter import *
def verify_login():
file = open("login.txt","r")
for row in file:
field = row.split(",")
if username.get() == field[0] and password.get() == field[1]:
print("Correct!")
else:
print("Fail")
### LOGIN SCREEN ###
def LoginPage():
global username
global password
login_screen=Tk()
login_screen.title("Login")
login_screen.geometry("300x250")
Label(login_screen, text="Please enter login details").pack()
Label(login_screen, text="").pack()
Label(login_screen, text="Username").pack()
username=StringVar()
password=StringVar()
username_login = Entry(login_screen, textvariable=username)
username_login.pack()
Label(login_screen, text="").pack()
Label(login_screen, text="Password").pack()
password_login= Entry(login_screen, textvariable=password, show= '*')
password_login.pack()
Label(login_screen, text="").pack()
Button(login_screen, text="Login", width=10, height=1,command=verify_login).pack()
login_screen.mainloop(
### MAIN SCREEN ###
def Startpage():
global gui
gui=Tk(className="Login Form")
gui.geometry("500x200")
button = Button(gui, text='Login', width=20, height=3, bg='#0052cc', fg='#ffffff', activebackground='#0052cc', activeforeground='#aaffaa', command=LoginPage).pack()
gui.mainloop()
Startpage()
我的文本文件具有以下格式的登录名和密码:
登录,a,yex,joe,morgan,1,sanjay,2
您的文本文件格式
登录,a,是的,乔,摩根,1,桑杰,2
apears将值的类型存储在第一个单词login中
这意味着当您从列表中访问项目0时,您将获得“登录”而不是“a”
您应该将尝试访问的索引更改为1和2,而不是0和1
def verify_login():
file = open("login.txt","r")
for row in file:
field = row.split(",")
if username.get() == field[1] and password.get() == field[2]:
print("Correct!")
else:
print("Fail")
也许用户名和密码有尾随空格,比如
sanjay
和sanjay
不一样
要清理它,您可以在比较之前执行以下操作:
username.get().rstrip()
password.get().rstrip()
此rstrip()函数将删除尾部空白
另外,请确保您的文件在新行中包含每个用户名-密码对
然后你可以这样做:
用于文件中的行。readlines():
因此,您的verify_login()函数应该如下所示:
def verify_login():
file = open("login.txt","r")
for row in file.readlines():
field = row.split(",")
if username.get().rstrip() == field[0] and password.get().rstrip() == field[1]:
print("Correct!")
else:
print("Fail")
下面的内容应该适合您
verify\u login
现在是一个布尔函数
def verify_login(user_name,password):
with open("login.txt","r") as f:
for row in f:
row = row.strip()
field = row.split(",")
if user_name == field[0] and password == field[1]:
return True
return False
print(verify_login('Jack','pp'))
print(verify_login('usr1','pwd1'))
login.txt
usr1,pwd1
usr5,pwd5
输出
False
True
请添加文本文件的实际示例调试器告诉您
行
变量包含什么以及变量用户名
和密码
调试器没有告诉我关于这些的任何信息,只是通过打印“Fail”在控制台中说用户名和密码不正确这个问题至少在一定程度上与创建多个Tk
实例有关。我刚刚尝试过这个方法,它是有效的,但在控制台“Fail Correct”中出现了几次失败!失败``好吧,那是因为如果用户被验证了,我们什么也不做。要删除此打印消息,可以执行以下操作:如果username.get().rstrip()==字段[0]和password.get().rstrip()==字段[1]:打印(“正确!”)也中断,则完全删除else块@Yexthis在@fayez工作,但是现在,如果我在条目中输入了不正确的详细信息,控制台仍然会正确打印,因此它不会验证实际条目我已经编辑了代码。您应该执行以下操作:file.readlines()
。我想这会解决这个问题@是的,这适用于不正确的详细信息,但不适用于正确的详细信息现在xDI尝试了这一点,但出现了以下错误:Tkinter回调回溯中的异常(最近一次调用):文件“C:\Python33\lib\Tkinter_init_uuuu.py”,第1475行,在调用返回self.func(*args)TypeError:verify_login()缺少2个必需的位置参数:“用户名”和“密码”。您需要将用户名和密码传递给函数调用。看我的例子<代码>验证\u登录('Jack','pp')我用所有用户名和密码尝试过这样做,但仍然不起作用:(