具有唯一标识符的StringVar回调?

时间:2014-04-27 16:43:40

标签: python tkinter callback trace tkinter-entry

我正在存储一个条目矩阵,每个条目都附加到一个唯一的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的唯一标识符?

1 个答案:

答案 0 :(得分: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()