ホームページ >バックエンド開発 >Python チュートリアル >Tkinter ボタンのコマンドがクリック時ではなくすぐに実行されるのはなぜですか?

Tkinter ボタンのコマンドがクリック時ではなくすぐに実行されるのはなぜですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-12-23 11:01:33403ブラウズ

Why is my Tkinter button's command executing immediately instead of on click?

Tkinter での予期しないボタンのトリガー: 関数参照について

Tkinter では、ボタンを作成するときに、実行されるコマンドを指定できます。ボタンをクリックしたとき。ただし、コード サンプルでは、​​ボタンの作成時に指定されたコマンドがすぐに実行されます。

これが発生する理由を理解するには、次のスニペットを考慮してください。

b = Button(admin, text='as', command=button('hey'))

このコードは次のとおりです。以下と同等:

result = button('hey')
b = Button(admin, text='as', command=result)

コマンド パラメータ内で button('hey') を呼び出すと、関数が呼び出され、すぐに実行されます。その結果、ボタンが実際にクリックされる前にコード print('hey') と print('het') が出力されます。

この問題を解決するには、関数への参照を渡す必要があります。それを実行するのです。これを行うには、単純に括弧を省略します。

b = Button(admin, text='as', command=button)

これにより、ボタン関数への参照が渡され、ボタンの作成時ではなく、ボタンがクリックされたときに実行されます。

あるいは、ラムダ関数を使用して、目的の引数を指定して元の関数を呼び出す匿名関数を作成することもできます:

b = Button(admin, text='as', command=lambda: button('hey'))

以上がTkinter ボタンのコマンドがクリック時ではなくすぐに実行されるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。