我的登录页不可用

2024-10-03 11:15:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我正试着做一个登录程序,但我不能让它工作

当我运行代码并在右边的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()

Tags: texttkinterusernamepasswordwindowfilllabelpack
1条回答
网友
1楼 · 发布于 2024-10-03 11:15:42

现在,代码一运行就调用get()方法,这就是为什么会得到空值和“错误的输入”。
您需要使get()方法在单击按钮之后运行,以便给用户一些时间来实际输入一些值

所以您应该将Entry作为参数传递,并在lambda内部调用get()方法

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

但是我认为,应该使用一个包装器函数来调用checkLogin,而不是lambda。这使得你的代码更容易阅读和遵循

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)

相关问题 更多 >