我有一个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)
答案 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)