ホームページ > バックエンド開発 > Python チュートリアル > ループ内で作成された複数の Tkinter ボタンに一意の引数を渡すにはどうすればよいですか?

ループ内で作成された複数の Tkinter ボタンに一意の引数を渡すにはどうすればよいですか?

Mary-Kate Olsen
リリース: 2024-12-26 22:06:18
オリジナル
678 人が閲覧しました

How Can I Pass Unique Arguments to Multiple Tkinter Buttons Created in a Loop?

Tkinter でコマンド引数を使用したボタン作成を理解する

Tkinter では、ループ内に複数のボタンを作成すると、動的なユーザー インターフェイスを生成するのに役立ちます。ただし、コマンド引数をボタンに渡すと、特にどのボタンが押されたかを区別しようとする場合に問題が発生する可能性があります。

次のコードを考えてみましょう。ここで、ループ カウンターによってタイトルが増分されたボタンが作成されます。

def createGameURLs(self):
    self.button = []
    for i in range(3):
        self.button.append(Button(self, text='Game '+str(i+1),
                                  command=lambda: self.open_this(i)))
        self.button[i].grid(column=4, row=i+1, sticky=W)

def open_this(self, myNum):
    print(myNum)
ログイン後にコピー

ボタンのいずれかをクリックしたときにボタンの識別子 (myNum) を出力しようとすると問題が発生します。出力には常に、最後の反復の値である 2 が表示されます。この動作は、各ボタンが固有のタイトルにもかかわらず本質的に区別できないことを示しています。

問題の解決

この問題を解決するには、各ボタンが独自の i 値を確実に取得するようにする必要があります。創造の時代。これを実現するには、ラムダ関数を使用した賢いテクニックを使用できます。

def createGameURLs(self):
    self.button = []
    for i in range(3):
        self.button.append(Button(self, text='Game '+str(i+1),
                                  command=lambda i=i: self.open_this(i)))
        self.button[i].grid(column=4, row=i+1, sticky=W)

def open_this(self, myNum):
    print(myNum)
ログイン後にコピー

ラムダ関数内に代入 i=i を追加することで、ラムダ関数の実行時に i の現在値を効果的に「フリーズ」します。と定義されています。これにより、ループが完了した後でも各ボタンが一意の識別子を維持することが保証されます。

結論

この手法により、ループ内で複数の Tkinter ボタンを動的に作成でき、各ボタンを一意に識別できます。クリックしました。ラムダ関数とクロージャの動作を理解することで、Tkinter アプリケーションでより多くの制御と柔軟性を実現できます。

以上がループ内で作成された複数の Tkinter ボタンに一意の引数を渡すにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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