2014-04-27 124 views
0

我存儲了一個條目矩陣,每個條目都附有一個唯一的StringVar。在StringVar的回調中,我希望能夠找到與矩陣有關的哪個StringVar。這是我有:帶唯一標識符的StringVar回調?

def callback(sv, index):  
     print index 

    for i in range(ncols): 
     for j in range(self.nrows): 
      sv = StringVar() 
      uniqueId = str(i)+str(j) 
      sv.trace("w", lambda name, index, mode, sv=sv: callback(sv, uniqueId)) 
      self.results[i][j] = Entry(gridtable,textvariable=sv,bg='grey',borderwidth=1,fg='black',width=self.widget_width).grid(row=j+2,column=i+1,sticky='ew') 

然而,總是打印相同指數(「718」 - 這是「7」 +「18」:值,我和與j停止)。我如何獲得這些StringVars的唯一標識符?

回答

3

sv變量在您的代碼中發生變化,但uniqueID卡住了它給出的最後一個值。您可以將其設置爲在該循環的迭代中記住它的值,方法是將其包含在lambda表達式中,如下所示:

from Tkinter import * 

def callback(var, index): 
    print var, index 

root = Tk() 

for i in range(10): 
    var = StringVar() 
    uniqueID = i 
    var.trace('w', lambda name,index,mode, var=var, uniqueID=uniqueID: callback(var, uniqueID)) 
    Entry(root, textvariable=var).pack() 

mainloop() 
+0

謝謝!這是完美的。你能解釋一下lambda在這種情況下做什麼嗎?換句話說,這是如何解決它的? – Adam

+2

通過添加'var = var'和'ID = ID',您可以在創建參數時爲其分配默認值。如果沒有默認值,trace方法將調用具有「uniqueID」當前值的命令,該值將是給定的最後一個值。 – atlasologist

+0

非常好。再次感謝你 – Adam