如何在python中使用文本文件验证条目数据?

时间:2015-07-15 17:13:50

标签: python tkinter

所以我试图创建一个基本程序,当有人将数据输入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)

1 个答案:

答案 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