python - 如何让 python 循环记住每个值?

标签 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 我按下的任何按钮。我不知道这是 lambdatkinter 的问题,还是我的编程问题,但我想知道如何解决它。

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

最佳答案

有一个常见的技巧:

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

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

关于python - 如何让 python 循环记住每个值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51342472/

相关文章:

Python opencv特征检测器导致段错误

python - 鼠标悬停时如何更改行颜色? Tkinter TreeView

Python 3 : win32com object. 大小抛出异常 (pywintypes.com_error)

postgresql - 用随机等级更新表

excel - 仅对公式单元格执行操作时出错

python - 获取错误 `No module named mime.text` [Python]

python - python中的柯里化(Currying)装饰器

python - 替换给定文本文件中指定位置的特定单词 (Python)

python - 指向python中指针的指针

c++ - 两个同时 for 循环 MATLAB 或 C++