将函数分配给在tkinter中为for循环中创建的按钮



我有一个for循环,该循环根据我的列表的长度Compkeys创建了一定量的按钮(以TKINTER)。当我制作每个按钮时,它将给出一个先前制作的功能,该功能需要一个输入。我正在尝试使函数的输入特定于for循环的迭代。例如,循环中创建的第一个按钮应在列表中具有第一个项目作为其函数的输入。

但是,每个按钮仅接收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)

您必须通过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)

最新更新