将功能分配给在Tkinter中的for循环中创建的按钮

时间:2017-12-02 02:53:02

标签: python function for-loop button tkinter

我有一个for循环,根据列表的长度compkeys创建一定数量的按钮(在tkinter中)。当我按下每个按钮时,它会被赋予一个先前生成的功能,该功能需要一个输入。我试图输入特定于for循环迭代的函数。例如,在循环中创建的第一个按钮应该将列表comp键中的第一个项作为其函数中的输入。

但是,每个按钮仅接收x的最终值的输入,而不是x的值,具体取决于循环重复的次数。感谢您提供任何帮助:)

import tkinter

compkeys = [2017onsc, 2017onwat]

for x in range(len(compKeys)):
    compButton = Button(root, text = compKeys[x], command=lambda: compBuDef(compKeys[x]))
    compButton.place(x=x * 100 + 200, y=300)

1 个答案:

答案 0 :(得分:1)

您必须通过lambda函数传递参数:

for x in range(len(compKeys)):
    compButton = Button(root, text=compKeys[x], command=lambda z=compKeys[x]: compBuDef(z))
    compButton.place(x=x*100+200, y=300)

或更好,迭代元素:

for idx, ckey in enumerate(compKeys):
    compButton = Button(root, text=ckey, command=lambda z=ckey: compBuDef(z))
    compButton.place(x=idx*100+200, y=300)