我创建了一个小GUI,我想在循环中创建按钮,打开一个文本文件。打开文本文件的功能位于我已经包含的另一个python模块中:
def openTextEditor(textfile):
"""opens the textfile with path 'textfile' """
[...]
在我的实际循环中,我尝试为按钮分配不同的路径:
for path in foobar:
print path
tk.Button(text="EDIT",
relief="tk.RAISED",
bg='black',
fg='white',
command= lambda: openTextEditor(path) ).grid(row=r, column=c)
从this post我知道我必须使用lamda表达式才能将参数作为按钮命令传递。
但是,我的控制台会打印不同的文本文件路径:
path1
path2
path3
虽然我的所有3个按钮都使用 path3 打开文本文件。我假设只有lambda函数的最后一个赋值有效,但为什么呢?