所以我试图创建一个基本程序,当有人将数据输入Entry框时,它会检查它是否与文本文件中的数据匹配。这是我的代码,但每当我按下按钮激活功能时,没有任何反应,没有错误,没有。我一直在网上搜索并在stackoverflow整夜,请帮忙。 :(
if login_form is 1:
frame_2.destroy()
label_2 = Label(frame_1, text="Username")
label_3 = Label(frame_1, text="Password")
label_1 = Label(frame_1, text="Name")
svalue = StringVar()
svalue_1 = StringVar()
svalue_2 = StringVar()
entry_1 = Entry(frame_1, textvariable=svalue)
entry_2 = Entry(frame_1, textvariable=svalue_1)
entry_3 = Entry(frame_1, textvariable=svalue_2)
label_1.grid(row=0, sticky=E)
label_2.grid(row=1, sticky=E)
label_3.grid(row=2, sticky=E)
entry_1.grid(row=0, column=1)
entry_2.grid(row=1, column=1)
entry_3.grid(row=2, column=1)
def check():
directory = r'C:\Users\Ethan\Desktop\PycharmProjects\Learning\UserList\%s' % svalue.get()
os.chdir(directory)
fr = open(svalue.get(), 'r')
text = fr.readlines()
username = svalue_1.get()
password = svalue_2.get()
if username is text[0] and password is text[1]:
print("...")
else:
print("...")
button_1 = Button(text="Login", fg="blue", command=check)
button_1.grid(row=3, columnspan=2)
答案 0 :(得分:1)
基本问题是is
没有按照您的想法行事。它不验证两个字符串是否相等,它验证两个变量指向同一个对象。代码中的if
语句永远不会成立,因为您要比较的值是不同的对象(读取:两个不同的局部变量)
您还有一个问题,即您通过readlines
从文件中获取的数据将在数据中包含换行符,但来自窗口小部件的数据则不会。在进行比较之前,您应该删除换行符。
你需要改变这个:
if username is text[0] and password is text[1]
......对此:
if username == text[0].strip() and password == text[1].strip()
有关is
运算符的详细信息,您可以阅读问题的答案Understanding Python's "is" operator