首页 > 解决方案 > 您如何动态地为按钮列表分配相同的功能但不同的参数?

问题描述

我有一个使用 Tkinter 的 python 程序,它动态创建除了它们的位置/索引之外相同的按钮。这些按钮通过循环创建并存储在列表中。因此,这些按钮只能通过它们在列表中的索引来识别。

我稍后会尝试遍历此列表并为按钮分配一个函数,该函数的唯一参数是该按钮在列表中的索引位置。例如:

for i in range(len(button_list)):
button_list[i].config(command=lambda: start_time(button_list[i]))

因为参数是在单击按钮时分配的,而不是在将功能分配给按钮时分配的,所以单击任何按钮总是会激活最终按钮的功能而不是其自身的功能。

当函数分配给按钮时,有没有办法为函数分配参数?

这是带有按钮的窗口: 带有按钮的窗口

这是我正在尝试做的硬编码示例:

button_list[0].config(command=lambda: start_time(0))
button_list[1].config(command=lambda: start_time(1))
button_list[2].config(command=lambda: start_time(2))

我也试过这个:

index_list = list(range(len(button_list)))
for x in index_list:
    onclick = lambda index=x: start_time(x)
    button_list[x].config(command=onclick)

任何帮助,将不胜感激。谢谢

编辑:为了清楚起见,这是我的更多代码以提供更多上下文:

def start_time(index):
now_local = datetime.now()
hour = now_local.strftime("%H")
minute = now_local.strftime("%M")
second = now_local.strftime("%S")

global time_start
time_start = [hour, minute, second]

global button_list
button_list[index].config(text="Stop", command=lambda: end_time(index))

    for i in range(len(button_list)):
    if i == index:
        continue
    else:
        button_list[i].config(state=DISABLED)

标签: pythonbuttontkinterdynamiccommand

解决方案


我不是 100% 确定您在问什么,但是如果我理解正确,您希望将按钮列表的索引分配给该索引按钮start(time)的配置文件中。

如果我理解正确,您可以使用它enumerate()来解决问题:

for ind, button in enumerate(button_list):
    button_list[ind].config(command= lambda: start_time(ind)

推荐阅读