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

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

DDD
DDDオリジナル
2024-12-23 09:46:10180ブラウズ

Why Does My Tkinter Button Execute Its Command on Creation Instead of On Click?

作成時のボタン コマンドの実行

Tkinter では、Button インスタンスがコマンド パラメーターで初期化されるとき、関連付けられた関数は次のようになります。ボタンをクリックすると実行されます。ただし、場合によっては、予期した動作に反して、ボタンの作成直後にコマンドが実行されることがあります。

コード例の分析

次のコードを考えてみましょう。

from Tkinter import *

admin = Tk()
def button(an):
    print(an)
    print('het')

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

問題の説明

次の場合このコードを実行すると、ボタンが正しく機能しないようです。クリックされたときにボタン関数を実行する代わりに、作成時にすぐに「hey」と「het」を出力します。

説明

問題はコマンドの実行方法にあります。パラメータは初期化中です。行:

command=button('hey')

は、button('hey') 関数呼び出しの結果をコマンド パラメーターに渡しています。これは次と同等です。

result = button('hey')
command=result

button('hey') 関数はすぐに実行され、結果を返すため、コマンドは関数参照自体ではなく結果に設定されます。その結果、関数はボタンをクリックしたときではなく、すぐに実行されます。

解決策

この問題を解決するには、ボタンへの参照を渡す必要があります。関数を実行せずに実行します。これを行うには、コマンド パラメータを初期化するときにかっこを省略します。

command=button

補足

  • 関数を渡すことの違いを理解することが重要です。関数の参照と実行。
  • 提供するには、ラムダ関数または functools.partial の使用を検討してください。必要に応じてパラメータをコールバック関数に渡します。
  • 詳細については、Tkinter コールバックに関するzone.effbot.org チュートリアルを参照してください。

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

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