tkinter-从csv文件检查基本登录表单

时间:2019-05-15 23:26:07

标签: python python-3.x tkinter

我正在尝试创建一个tkinter登录表单,该程序应该允许现有用户在输入框中键入其用户名,并在输入框中键入其密码,然后python需要读取存储在csv文件中的值,并且然后检查用户名和密码是否正确,然后使用“提交”按钮检查凭据是否正确以及是否正确;它将允许他们转到下一帧。我不确定如何使其正常工作,因为“提交”按钮没有任何作用。

这是我的代码:

class MainMenu(tk.Frame):

def __init__(self, parent, controller):
    tk.Frame.__init__(self, parent)
    self.controller = controller
    label = tk.Label(self, text="     Main Menu - Login    ", fg="red", font=controller.title_font2)
    label.pack(side="top", fill="x", pady=20)
    usernameL = tk.Label(self, text="Username").pack(side="top") 
    uUserLogin = tk.Entry(self)
    uUserLogin.pack()
    passwordL = tk.Label(self, text="Password").pack(side="top")
    uUserPassword = tk.Entry(self)
    uUserPassword.pack()

    def checkUser():
        uLoginUser = False
        uLoginPassword = False
        uUserCheck = uUserLogin.get()
        uUserCheckP = uUserPassword.get()
        with open("Users.csv", "r") as f:
            csvreader = csv.reader(f, delimiter=",")
            for row in csvreader:
                if uUserCheck == row[0]:
                    uLoginUser == True
                    if uUserCheckP == row[1]:
                        uLoginPassword == True
                        #labelT = tk.Label(self, text="Hello")
                        #labelT.pack()
        if uLoginUser and uLoginPassword == True:
            controller.show_frame("MainTMenu")

    submit = tk.Button(self, text="Submit",
                       command=checkUser())
    submit.pack()


    #If correct -> Go to next frame

csv文件的排列方式为第一行为2个标题-第一列为“ Users”,第二列为“ Passwords”-其余各行在正确的列和正确的行中包含用户和密码

这可能有助于理解格式(以防我不好解释):

 Users, Passwords
 user, password
 user, password

任何帮助将不胜感激

1 个答案:

答案 0 :(得分:0)

  

“提交”按钮没有任何作用

这很容易解决,问题是您的函数init创建了调用命令的按钮而不是存储按钮command=checkUser(),有两种解决方法。

将按钮的命令选项更改为command=checkUsercommand=lambda: checkUser()

  

为解决您的登录表单的工作方式,我更改了checkUser()函数,这是我的更新

def checkUser():
    uUserCheck = uUserLogin.get()
    uUserCheckP = uUserPassword.get()
    with open("Users.csv", "r") as f:
        csvreader = csv.reader(f, delimiter=",")
        for row in csvreader:
            if uUserCheck == row[0] and uUserCheckP == row[1]:
                labelT = tk.Label(self, text="Hello")
                labelT.pack()
                controller.show_frame("MainTMenu")
                break

这将取消使用嵌套的if语句,并且如果找到用户名和密码匹配项,则将终止for循环,因此不必每次都检查每个用户名和密码选项。

如果您有任何其他问题,请随时提问:)