Python:使用Tkinter时使用for循环将命令分配给按钮

时间:2012-06-20 22:57:32

标签: python button tkinter

我正在使用Tkinter,我想知道是否有办法为一堆按钮命令定义一个回调函数,其中命令的名称类似于' 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)

我可以手动为每个按钮添加一个命令,并为每个按钮定义一个函数,但我宁愿只需定义一个函数,并在for循环中给出命令唯一的名称,因为我还有一个按钮这个月的每一天。

有没有办法做到这一点? 我使用的是Python 2.7.2

由于

1 个答案:

答案 0 :(得分: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函数(如果有意义的话!)