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 サイトの他の関連記事を参照してください。