10

Python を学びながら、簡単な小さなユーティリティを作成しています。ボタンのリストを動的に生成します。

for method in methods:
    button = Button(self.methodFrame, text=method, command=self.populateMethod)
    button.pack({'fill': 'x', 'expand': 1, 'padx': 5, 'pady': 3})

その部分はうまく機能します。ただし、 内でどのボタンが押されたかを知る必要がありますself.populateMethod。どのように伝えることができるかについてのアドバイスはありますか?

4

2 に答える 2

23

ラムダを使用して引数をコマンドに渡すことができます。

def populateMethod(self, method):
    print "method:", method

for method in ["one","two","three"]:
    button = Button(self.methodFrame, text=method, 
        command=lambda m=method: self.populateMethod(m))
    button.pack({'fill': 'x', 'expand': 1, 'padx': 5, 'pady': 3})
于 2009-10-09T11:51:46.637 に答える
2

コマンド メソッドにイベント オブジェクトが渡されていないようです。

2 つの回避策が考えられます。

  • 各ボタンに固有のコールバックを関連付ける

  • button.bind('<Button-1>', self.populateMethod)self.populateMethod を として渡す代わりに呼び出しますcommand。次に、self.populateMethod は、イベント オブジェクトになる 2 番目の引数を受け入れる必要があります。

    この 2 番目の引数が と呼ばれると仮定するとeventevent.widgetはクリックされたボタンへの参照です。

于 2009-10-08T19:15:08.347 に答える