2017-02-21 3 views
-2

私は大きなプログラムで次の行を持っています。これらの行に何が問題なのですか?

username = Entry(loginPage) 
password = Entry(loginPage) 

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

プログラムが実行されると、開始時loginClicked実行一度機能(フィールドは空になっていると、ボタンがクリックされていない場合)、それはそれが実行される唯一の時間です。その後、ボタンをクリックすると、機能がまったく実行されません。関数内のprintステートメントがこれを確認します。

答えて

0

コメントに記載されているように、ウィジェットを作成するときに、ウィジェットオプションcommand=に関数ハンドル(ここでは間違った用語かもしれません)を渡す代わりに、ウィジェットが作成される前に関数を呼び出す( '実行'しています)。

これはlambdaで無名関数を使用することによって解決することができます。

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

これは、その適切な引数を使って機能loginClicked()を呼び出しTkinterののコールバック、に供給するための「使い捨て」を関数を作成します。

Tkinterコールバックの詳細については、effbot.orgも参照してください。

関連する問題