【问题标题】:Assigning functions to buttons created in a for loop in Tkinter [duplicate]将功能分配给在Tkinter的for循环中创建的按钮[重复]
【发布时间】:2018-05-16 04:34:47
【问题描述】:

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

【问题讨论】:

    标签: python function for-loop button tkinter


    【解决方案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)
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-05-19
    相关资源
    最近更新 更多