2017-03-06 21 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を渡して、ラムダの内部に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) 

EDIT:はまだ、より良いアプローチは、(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

は、完全にlambda' 'の使用を削除することです迅速かつ幻想的なサポート – SerialCoder

+0

よりよいのためにあなたをとても感謝しています。 'checkLogin'は、呼び出されたときに値を簡単に取り出すことができます。 –

+0

@Bryan A-ha!なぜ私はここにラッパーが必要だと思ったのか分かりません。私は脳の部分から安全だとは思わない。ありがとう。 (今はモバイルで、正しく編集できず、できるだけ早く編集します) – Lafexlos

関連する問題