2017-03-06 131 views
0

我正在嘗試登錄程序,但無法使其工作。我的登錄頁面不起作用

當我運行代碼並輸入正確的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() 

回答

2

現在,你的代碼,一旦調用get()方法,因爲它運行,這就是爲什麼你得到空值和「輸入錯誤」。
您需要讓按鈕單擊後方法運行get(),以便用戶有時間實際輸入一些值。

所以,你應該通過Entry S作爲參數,並調用拉姆達內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) 
+0

哇它的作品,謝謝你這麼多的快速和夢幻般的支持 – SerialCoder

+0

更妙的是完全取消使用lambda'的'。當checkLogin被調用時,它可以很容易地獲取這些值。 –

+0

@Bryan A-ha!不知道爲什麼我認爲我需要在這裏包裝。我想無腦是無法避免的。謝謝。 (現在我在手機上,無法正確編輯,將盡快編輯) – Lafexlos