ホームページ >バックエンド開発 >Python チュートリアル >Tkinter ボタンの「Command」パラメータが宣言時に実行されるのはなぜですか?
tkinter では、ボタン ウィジェットの "command" パラメーターは、ボタンがオンになったときにコールバックを実行することを目的としています。押した。ただし、ボタンをクリックしたときではなく、コールバック関数が宣言と同時に実行される理由は不可解です。
鍵は、インスタンス作成時のパラメータの評価にあります。関数を「コマンド」パラメーターとして渡す場合、Python は最初に関数を評価し、括弧内に渡された引数を使用してその関数を呼び出します。たとえば、次のコードでは:
<code class="python">def Hello(): print("Hi there!") hi = Button(frame, text="Hello", command=Hello())</code>
このコードは Hello 関数を呼び出し、return ステートメントがないため None 値を返し、この None 値を「command」パラメータとしてボタン。その結果、ボタンがクリックされたときにコールバックは実行されず、初期評価では「こんにちは!」が出力されます。
この問題を修正し、ボタンがクリックされたときにのみコールバックが実行されるようにするには、次の関数を渡します。
<code class="python">hi = Button(frame, text="Hello", command=Hello)</code>
この変更により、Hello 関数が呼び出し可能オブジェクトとして保存され、ボタンのクリック時に呼び出されます。
関数オブジェクトとその戻り値の基本的な違いを理解するこの文脈では重要です。関数オブジェクトは function_name によって参照され、 function_name() は戻り値を表します。前者は呼び出し可能ですが、後者は関数を呼び出した結果です。
本質的に、ボタンの「コマンド」パラメータを定義するときは、時期尚早を避けるために、戻り値ではなく関数オブジェクトを渡すことが不可欠です。実行。この区別により、ボタンクリック時のシームレスなコールバック機能への道が開かれます。
以上がTkinter ボタンの「Command」パラメータが宣言時に実行されるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。