TkInter所有按钮打开相同的文件

时间:2014-05-12 15:02:07

标签: python for-loop tkinter

我写过这个小程序。它从配置文件中读取几个文件名(主要是PDF),并为每个文件创建一个按钮,该按钮应该使用默认应用程序打开文件。

问题是,所有按钮始终打开config.ini文件中的最后一个文件。这种行为告诉我for循环必定有问题,但我不知道如何修复它。

有什么想法吗?

from tkinter import *
import subprocess, os, sys

def opendoc(file):
    if sys.platform == 'linux':
        subprocess.call(["xdg-open", file])
    else:
        os.startfile(file)

ini = open('config.ini')
carray = []

for line in ini:
    carray.append(line)

for line in carray:
    print(line)

master = Tk()

for i in carray:
    Button(master, text=i, command=lambda: opendoc(i)).pack(anchor=W)

mainloop()

1 个答案:

答案 0 :(得分:2)

也许试试

from functools import partial

并使用

Button(master, text=i, command=partial(opendoc, i))

使用i的当前值创建部分对象,而使用lambda 在封闭范围内使用对变量i的引用,其值可以更改。 或类似的东西。

我总是发现自己使用了部分用tkinter。