Python 具有唯一标识符的StringVar回调?
我正在存储一个条目矩阵,每个条目都连接到一个唯一的Python 具有唯一标识符的StringVar回调?,python,tkinter,callback,trace,tkinter-entry,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
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':i和j停止的值)。如何为这些
StringVars
获取唯一标识符?您的代码中的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()
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()
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()
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()
非常感谢。那太完美了。你能解释一下lambda在这个案子里做了什么吗?换句话说,这是如何解决的?通过添加
var=var
和ID=ID
,在创建参数时为其指定默认值。如果没有默认值,trace
方法调用当前值为uniqueID
的命令,该值将是最后一次给出的值。非常好。再次谢谢你谢谢你!那太完美了。你能解释一下lambda在这个案子里做了什么吗?换句话说,这是如何解决的?通过添加var=var
和ID=ID
,在创建参数时为其指定默认值。如果没有默认值,trace
方法调用当前值为uniqueID
的命令,该值将是最后一次给出的值。非常好。再次谢谢你谢谢你!那太完美了。你能解释一下lambda在这个案子里做了什么吗?换句话说,这是如何解决的?通过添加var=var
和ID=ID
,在创建参数时为其指定默认值。如果没有默认值,trace
方法调用当前值为uniqueID
的命令,该值将是最后一次给出的值。非常好。再次谢谢你谢谢你!那太完美了。你能解释一下lambda在这个案子里做了什么吗?换句话说,这是如何解决的?通过添加var=var
和ID=ID
,在创建参数时为其指定默认值。如果没有默认值,trace
方法调用当前值为uniqueID
的命令,该值将是最后一次给出的值。非常好。再次感谢你