ホームページ > バックエンド開発 > Python チュートリアル > Lambda 関数を使用して Tkinter For ループでボタン コマンドの再割り当てを回避するにはどうすればよいですか?

Lambda 関数を使用して Tkinter For ループでボタン コマンドの再割り当てを回避するにはどうすればよいですか?

Linda Hamilton
リリース: 2024-12-15 05:57:17
オリジナル
663 人が閲覧しました

How to Avoid Reassigning Button Commands in Tkinter For Loops Using Lambda Functions?

Lambda を使用した Tkinter For ループでのボタン コマンドの割り当て

ラムダ関数を使用して Tkinter for ループ内でボタンを作成する場合、次のことを避けることが重要ですループ内で同じ変数を再割り当てします。これにより、各ボタンが確実に一意のパラメータを受け取るようになります。

問題:

提供されたコード内:

def a(self, name):
    print(name)

users = {"Test": "127.0.0.0", "Test2": "128.0.0.0"}
row = 1
for name in users:
    user_button = Tkinter.Button(self.root, text=name,
                                 command=lambda: self.a(name))
    user_button.grid(row=row, column=0)
    row += 1
ログイン後にコピー

for ループは同じ名前の変数を参照し、反復ごとに再割り当てされます。その結果、すべてのボタンが、name に割り当てられた最後の値を使用して同じ関数を呼び出し、誤った動作を引き起こします。

解決策:

この問題を解決するには、次のようにします。デフォルトのパラメータを使用して、name 変数の現在の値をラムダのキーワード引数にバインドできます:

user_button = Tkinter.Button(self.root, text=name,
                             command=lambda name=name: self.a(name))
ログイン後にコピー

デフォルトのキーワード引数では、それぞれボタンのラムダ関数には name 変数の独自のコピーがあり、ボタンがクリックされたときに正しいパラメーターが使用されるようにします。

以上がLambda 関数を使用して Tkinter For ループでボタン コマンドの再割り当てを回避するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート