首页 > 解决方案 > 如何使用不同的命令在 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”)

我怎样才能解决这个问题 ?

标签: pythontkinter

解决方案


当您在循环中创建 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()

推荐阅读