2017-02-21 8 views
0

私のプログラムでは、ボタンをクリックすると関数が実行され、完全に正常に動作しますが、何も格納していないので、return文は無意味です。それが問題です。関数の戻り値をボタンのクリックに格納する方法は?

これはプログラムです。

button1 = Button(loginPage,text = "Login", fg = "red", command = lambda : loginClicked(username.get(), password.get())) 

となり、関数return文は次のようになります。

return loggedIn,userID 

私は、関数がその中のprintステートメントのために実行されることを知っています。

この機能は、Tkinterユーザーインターフェイスで入力が入力され、ボタンがクリックされたときにのみ実行できるため、関数の返された結果を後でプログラムで使用するためにどのように保存することができます。

答えて

0

これらの変数を格納するために任意のデータ構造を使用できます。

たとえば、前にグローバルとして定義した2つの変数を使用できます。

loggedIn = None 
userID = None 

def loginClicked(username, password): 
    global loggedIn 
    global userID 
    loggedIn,userID = username, password 

button1 = Button(loginPage,text = "Login", fg = "red", command = lambda : loginClicked(username.get(), password.get())) 
0

あなたはグローバルスコープで変更可能な変数を定義し、関数内からの値を格納することによってそれを解決することができます。

1

lambdaの使用を削除し、単に関数を呼び出します。私は人々がlambdaをtkinterで必要としないときはいつも使っているのを見ます。lambdaは使用していますが、この場合、コードを読みにくくして維持するのが難しくなります。経験則として、ボタンまたはバインディングは常に関数を呼び出す必要があります。

これは、グローバル変数、クラス、データベース、またはその他の方法を使って、これを行う方法がはるかに簡単になります。

def loginClicked(): 
    global loggedIn, userID 

    name = username.get() 
    pw = password.get() 

    <do the login> 

    loggedIn = True 
    userID = name 


button1 = Button(..., command = loginClicked) 
関連する問題