1

私は Tkinter を使用していますが、一連のボタン コマンドに対して 1 つのコールバック関数を定義する方法があるかどうか疑問に思っています。コマンドには「callback1」、「callback2」などの名前が付いています。

私はこのようなボタンを作成しています (これはカレンダーの一部です):

buttonlist = ['c1', 'c2', 'c3', 'c4', 'c5', 'c6', 'c7']
daylist = ['mo', 'tu', 'we', 'th', 'fr', 'sa', 'su']
counter = 0
daycount = -1

for item in buttonlist:
    counter = counter + 1
    daycount = daycount + 1
    item = Tkinter.Button(label1, width=5, bg = 'white', 
                                text = daylist[daycount])
    item.grid(row=0, column = counter, padx=5, pady=5)

各ボタンに 1 つのコマンドを手動で追加し、それぞれに関数を定義することもできますが、1 つの関数のみを定義し、for ループでコマンドに一意の名前を付けたいと思います。月に。

これを行う方法はありますか?私はPython 2.7.2を使用しています

ありがとう

4

1 に答える 1

2

Tkinterを使ってから久しぶり

まず、ループを次のように変更できます(必要に応じて調整します)。

for idx, (bl, dl) in enumerate(zip(buttonlist, daylist)):
    TKinter.Button(text=dl, command=lambda: button_pressed(bl))

次に、適切な場所に置きます。

def button_pressed(which):
    print 'I am button {}'.format(b1)

lambda関数は、押されたボタンでbutton_pressed関数を呼び出すことを目的とした無名関数を作成します(それが理にかなっている場合)。

于 2012-06-20T23:15:22.920 に答える