Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 具有唯一标识符的StringVar回调?_Python_Tkinter_Callback_Trace_Tkinter Entry - Fatal编程技术网

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
的命令,该值将是最后一次给出的值。非常好。再次感谢你