python - 您如何动态地为按钮列表分配相同的功能但不同的参数?
问题描述
我有一个使用 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)
解决方案
我不是 100% 确定您在问什么,但是如果我理解正确,您希望将按钮列表的索引分配给该索引按钮start(time)
的配置文件中。
如果我理解正确,您可以使用它enumerate()
来解决问题:
for ind, button in enumerate(button_list):
button_list[ind].config(command= lambda: start_time(ind)
推荐阅读
- ios - 使用 DispatchQueue.main.async 在 Realm 中重新排序对象是否安全?
- angular - Angular 7 中的 Firebase 推送通知无法注册服务工作者
- javascript - 服务器上的 Rails 6 收到大量“ActionController::RoutingError: No route matches [GET] /31194a065aebf1674b61.worker.js”请求
- scala - 管道能变成变压器吗?
- haskell - 弱头范式的不同概念?
- javascript - 无法在 UpdateView 中关闭来自 SuccessMessageMixin 的消息
- php - 如何使用 Alvine HTML 组件查询标签和类?
- c++ - find_package(CURL REQUIRED) 找到丢失的库。为什么?
- python - Python 高级列表切片
- cefsharp - 如何拦截重定向链接的响应数据(301,302)使用cefsharp