宣言時にボタン パラメータ "command" が実行されるのはなぜですか?
Python では、ボタン ウィジェットの "command" パラメータが次の役割を果たします。コールバック関数を定義します。ただし、このコールバック関数がボタンの宣言と同時に実行されるように見えると、ユーザーは困惑する可能性があります。
この問題は、「command」パラメータに関数オブジェクトではなく関数呼び出し式が割り当てられている場合に発生します。例:
<code class="python">def Hello(): print("Hi there!") Button(frame, text="Hello", command=Hello()) # Function call expression</code>
このコードでは、式「Hello()」は Hello 関数を直ちに呼び出し、戻り値を返します。その結果、ボタンが作成される前にコールバック関数が実行され、「こんにちは!」というメッセージが表示されます。メッセージがコンソールに出力されます。
この問題を回避し、関数オブジェクトを「command」パラメータに割り当てるには、括弧なしで関数名を使用します。
<code class="python">Button(frame, text="Hello", command=Hello) # Function object</code>
関数オブジェクトは、への参照を保持します。そのコードは、コールバックが呼び出されたときに実行されます。さらに、引数を渡す必要がある場合は、ラムダ式を使用できます。
<code class="python">Button(frame, text="Hello", command=lambda: Goodnight("Moon"))</code>
この場合、ラムダ式は Goodnight("Moon") 呼び出しをラップし、ボタンがクリックされるまで実行を遅らせます。
以上がボタン「コマンド」が宣言されるとすぐに実行されるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。