如何使python循环记住每个值?

时间:2018-07-14 18:50:37

标签: python python-3.x for-loop tkinter lambda

每当我通过循环在tkinter中动态创建按钮时,就会通过循环调用具有为其分配值的函数,如下所示:

from tkinter import *
root=Tk()
def add(text):
    print(text)
for i in ('a', 'b', 'c'):
    Button(root, text=i, command=lambda:add(i)).pack()
mainloop()

我总是遇到这样的问题:无论我按什么按钮,都用循环中的最后一个值调用该函数。在这种情况下,它只打印我按下的任何按钮c。我不知道这是lambda还是tkinter还是仅仅是我的编程问题,但是我想知道如何解决它。

我尝试使用copy.copycopy.deepcopy(在lambda函数和字符串上)以及[:]str(在字符串上)。

1 个答案:

答案 0 :(得分:4)

有一个常见的窍门:

for i in ...:
    def command(i=i):
        add(i)
    Button(..., command=command)

看起来有点难看,但是它会在默认参数值中捕获i的当前值。还有其他方法可以解决此问题,但是此解决方案非常简洁。