python - 如何使用不同的命令在 tkinter 上执行多个按钮?
问题描述
所以我的问题是在这个程序中,我想创建“x”按钮(x 是列表的长度),每个按钮都有列表中元素的名称,并用名称调用函数“ChoicePage”作为参数的元素
示例:如果我有一个这样的列表[house, hospital, shop]
,程序会创建 3 个按钮:house、hospital 和 shop,它们调用 ChoicePage(a) 并带有 a = "house"、"hospital" 或 "shop"
for i in range(len(L)):
a = L[i]
Button(fen1, text=a, relief=RAISED, command = lambda:(ChoicePage(a))).pack()
fen1.mainloop()
这里的问题是它总是用列表的最后一个元素调用 ChoicePage(在前面的例子中它是“shop”)
我怎样才能解决这个问题 ?
解决方案
当您在循环中创建 lambda 时,它们最终会绑定到同一个变量(具有最后一次循环迭代的值)。您可以使用部分将值绑定到函数或在函数内存储值的其他一些方法。
from functools import partial
for i in range(len(L)):
a = L[i]
Button(fen1, text=a, relief=RAISED, command = partial(ChoicePage, a)).pack()
fen1.mainloop()
推荐阅读
- c# - 无法在控制台应用程序 .NET Core 中使用 IOptions
- javascript - 以与另一个数组相同的顺序对数组进行排序,如果不匹配,则添加到最后一个
- python - 无法读取 instance.png,因为文件丢失、权限不正确、格式不受支持或无效
- python - 参考 Python 字典主题:为相同的输入获取不同的输出
- r - 如何将以下列表输出转换为 R 中的数据框?
- php - 尝试在 bool laravel 8 上读取属性“名称”,变量未传输到视图
- java - 如何在像 Whatsapp 这样的 Recyclerview 中搜索和突出显示文本
- android - 不再支持源选项 5。使用 6 或更高版本的 Android Studio
- react-native - Agora SDK React Native - 如何为每个用户创建新的视频通话频道?
- angular - 角度材质对话框导入问题