2014-05-12 64 views
1

我寫過這個小程序。它從配置文件中讀取幾個文件名(主要是PDF),併爲每個應使用默認應用程序打開文件的文件創建一個按鈕。TkInter所有按鈕打開同一個文件

問題是,所有按鈕總是打開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() 
+0

因爲在最後一次迭代中,'i'被設置爲最終值,因此所有按鈕都指向該值。 –

回答

2

也許嘗試

from functools import partial 

並使用

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

局部對象是使用i的當前值創建,而拉姆達 使用參考變量i在附上範圍,其價值可能發生變化。 或類似的東西。

我總是發現自己使用部分與tkinter。