我的登录页面无效

时间:2017-03-06 13:19:45

标签: python python-3.x tkinter

我正在尝试登录程序,但我无法让它工作。

当我运行代码并输入右侧UsernamePassword时,它会输入错误信息。

import tkinter

window = tkinter.Tk()
window.title('LoginPage')

gebruikersnaam = 'Donald'
wachtwoord = 'Trump'

lblUsername = tkinter.Label(window,text='Username:')
lblUsername.pack(fill=tkinter.X)

entUsername = tkinter.Entry(window)
entUsername.pack(fill=tkinter.X)

lblPassword = tkinter.Label(window,text='Password:')
lblPassword.pack(fill=tkinter.X)

entPassword = tkinter.Entry(window)
entPassword.pack(fill=tkinter.X)

lblResult = tkinter.Label(window)
lblResult.pack(fil=tkinter.X)

def checkLogin(username,password):

    if str(username) == gebruikersnaam and str(password) == wachtwoord:
        lblResult.configure(text='Login was succesfull')

    else:
        lblResult.configure(text='Username or Password is wrong')

btn = tkinter.Button(window,text='Login',command= lambda    x=entPassword.get(), y=entUsername.get():checkLogin(y,x))

btn.pack(fill=tkinter.X)

window.mainloop()

1 个答案:

答案 0 :(得分:2)

现在,您的代码一旦运行就会调用get()个方法,这就是您获取空值和输入错误的原因"。
您需要在按下按钮后运行get()方法,以便为用户提供实际输入某些值的时间。

因此,您应该将Entry作为参数传递,并在lambda中调用get()方法。

btn = tkinter.Button(..., command=lambda x=entUsername, y=entPassword: checkLogin(x.get(), y.get()))
我认为,

但是,而不是lambda,你应该使用一个调用checkLogin的包装函数。这使您的代码更易于阅读和遵循。

def wrapperCheck():
    checkLogin(entUsername.get(), entPassword.get())

btn = tkinter.Button(window, text='Login', command=wrapperCheck)
btn.pack(fill=tkinter.X)

编辑:然而,更好的方法是(感谢来自Bryan Oakley的评论),从您的方法中删除参数并在其中获取这些值。

def checkLogin():
    username = entUsername.get() 
    password = entPassword.get()
    #since get returns string objects you dont need str calls 
    if username == gebruikersnaam and password == wachtwoord:
        lblResult.configure(text='Login was succesfull')
    else:
        lblResult.configure(text='Username or Password is wrong')

    #also you can remove these temp values and directly compare like below
    # entUsername.get() == gebruikersnaam and entPassword.get() == wachtwoord

btn = tkinter.Button(window,text='Login',command= checkLogin)