宣言時にボタン パラメーター "command" が実行されるのはなぜですか?
Python では、ボタン ウィジェットの "command" パラメーターが次の役割を果たします。コールバック関数を定義します。ただし、このコールバック関数がボタンの宣言と同時に実行されるように見えると、ユーザーは困惑する可能性があります。
この問題は、「command」パラメーターに関数オブジェクトではなく関数呼び出し式が割り当てられている場合に発生します。例:
def Hello():
print("Hi there!")
Button(frame, text="Hello", command=Hello()) # Function call expression
このコードでは、式「Hello()」はすぐに Hello 関数を呼び出し、戻り値を返します。その結果、ボタンが作成される前にコールバック関数が実行され、「こんにちは!」というメッセージが表示されます。メッセージがコンソールに出力されます。
この問題を回避し、関数オブジェクトを「command」パラメータに割り当てるには、括弧なしで関数名を使用します。
Button(frame, text="Hello", command=Hello) # Function object
Function オブジェクトは、コールバックが呼び出されたときに実行されるコードへの参照を保持します。さらに、引数を渡す必要がある場合は、ラムダ式を使用できます。
Button(frame, text="Hello", command=lambda: Goodnight("Moon"))
この場合、ラムダ式は Goodnight("Moon") 呼び出しをラップし、ボタンがクリックされるまで実行を遅らせます。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3