我如何在 python tkinter 中检查文本文件中的数据?登录系统不工作

问题描述

我制作了一个singup窗口,将人员的数据保存在文本文件登录窗口中,我使用for循环来读取数据并检查密码和用户名是否正确,但每次我按登录时,它只显示不正确的用户名或密码,即使密码正确也不会打开仪表板窗口。

def check():
        storefile = open('store.txt','r')
        for line in storefile:
            if namepasss and nameuser in line:
                dashboard()
            else:
                Label(my,text="Incorrect username or\n password.",fg="red",bg="lightgray").grid(row=4,column=2)


    name_useval = StringVar()
    name_passval = StringVar()
    namepasss = name_passval.get()
    nameuser = name_useval.get()
    Entry(my,textvariable=name_useval,bg="#e3e2e2",bd=0,highlightthickness=0,).grid(row=2,column=2)
    Entry(my,textvariable=name_passval,).grid(row=3,column=2)
    login = Button(my,text="Login",font=("sans serif",12,),bg="lightgray",bd=2,fg="Black",command=check).grid(row=10,column=2)

这是用户在singup窗口singup后数据保存在文本文件中的方式

('randomguy','randomguy@gmail.com','901909210','randompassword')
('randomguy2','randomguy2@gmail.com','901978210','randompassword2')

解决方法

声明

namepasss and nameuser in line

实际上被评估为

namepasss and (nameuser in line)

由于operator precedence。因此,考虑到 and 运算符的惰性,(写得不好)求值顺序如下:

if namepasss == True:
    if (nameuser in line) == True:
        return True
return False

由于 namepasssstring,因此除 "" 之外的任何内容都将评估为 True

您真正需要的是以下内容:

(namepasss in line) and (nameuser in line)

在不知道文件中写了什么以及为 namepasssnameuser 分配了什么值的情况下,很难提供更多帮助。