ホームページ >バックエンド開発 >Python チュートリアル >For ループを使用して Tkinter ボタン作成でパラメーターの重複を回避するにはどうすればよいですか?

For ループを使用して Tkinter ボタン作成でパラメーターの重複を回避するにはどうすればよいですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-12-18 19:48:11591ブラウズ

How to Avoid Parameter Duplication in Tkinter Button Creation Using For Loops?

Tkinter For ループでのボタン パラメーターの重複の克服

Tkinter では、適切なパラメーターの割り当てが行われている場合、for ループを通じてボタンを作成すると、予期しない動作が発生する可能性があります。実装されていない。次のコード スニペットを考えてみましょう:

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

意図された結果は、各ボタンがユーザー辞書から独自の一意のパラメータを受け取ることです。ただし、いずれかのボタンを押すと、辞書の最後の値 (例: "Test2") のみが出力されます。

この問題は、ラムダ式がループ全体で同じ名前の変数を使用するために発生します。各反復で前の値が上書きされ、ラムダにはループで最後に割り当てられた名前が残ります。

解決策: Lambda のデフォルトのキーワード パラメータ

これを解決するには、次のことができます。ラムダ式でデフォルトのキーワード パラメーターを使用します。修正されたコードは次のとおりです。

for name in users:
    user_button = Tkinter.Button(self.root, text=name,
                             command=lambda name=name: self.a(name))

name 変数の現在の値をラムダの name キーワード引数に明示的にバインドすることにより、ラムダは各ボタンの正しいパラメータを保持します。ボタンを押すたびに、目的の一意のパラメーター出力がトリガーされるようになりました。

この手法により、各ボタンが for ループ内で意図したパラメーターの割り当てを保持することが効果的に保証されます。

以上がFor ループを使用して Tkinter ボタン作成でパラメーターの重複を回避するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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