2017-03-06 5 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) 

편집 : 아직, 더 좋은 방법은, (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

관련 문제