我已经使用tkinter设置了一个Entry小部件,并且正在使用StringVar来跟踪对其的任何更改。但是,当我尝试使用回调函数时,发现无法将任何参数传递给它。
这是我尝试过的:
hpstring = StringVar()
hpstring.trace("w", hptrace)
hpstring.set("0")
hpbox = tk.Entry(frame, textvariable=hpstring)
hpbox.pack()
def hptrace(*args):
print(hpstring)
此操作失败,因为未定义hpstring。
hpstring = StringVar()
hpstring.trace("w", hptrace(hpstring))
hpstring.set("0")
hpbox = tk.Entry(frame, textvariable=hpstring)
hpbox.pack()
def hptrace(*args):
print(hpstring)
这也以某种方式失败了。
hpstring = StringVar()
hpstring.trace("w", lambda hpstring: hptrace(hpstring))
hpstring.set("0")
hpbox = tk.Entry(frame, textvariable=hpstring)
hpbox.pack()
def hptrace(*args):
print(hpstring)
这一次,它失败了,因为“()接受了1个位置参数,但给出了3个”。
有什么办法让我的回调函数(hptrace)以hpstring作为参数?
答案 0 :(得分:1)
有什么办法让我的回调函数(hptrace)以hpstring作为参数?
您可以使用lambda或functools.partial。要记住的重要一点是the function called by the trace is called with three arguments,因此,您对trace
发出的任何命令都必须接受这三个参数。
如果您只想向lambda
发送hpstring
,则使用hptrace
,您的代码应如下所示:
hpstring.trace("w", lambda var_name, var_index, operation: hptrace(hpstring))
注意:在尝试使用hptrace
之前,您需要先定义localField
,这是您问题中的代码无法做到的。