Python 使用lambda的回调参数
我两天前开始使用Python(2.7.3),我需要在GUI回调函数中使用参数。我一直在这里和effbot上寻找任何信息,但我无法找出我的情况有什么问题Python 使用lambda的回调参数,python,tkinter,Python,Tkinter,我两天前开始使用Python(2.7.3),我需要在GUI回调函数中使用参数。我一直在这里和effbot上寻找任何信息,但我无法找出我的情况有什么问题 from Tkinter import * fenetre = Tk() var_texte = StringVar() ligne_texte = Entry(fenetre, textvariable=var_texte ,width=30) def callback(s): print("we got there with :"+
from Tkinter import *
fenetre = Tk()
var_texte = StringVar()
ligne_texte = Entry(fenetre, textvariable=var_texte ,width=30)
def callback(s):
print("we got there with :"+s)
trace_name = var_texte.trace_variable("w",lambda: callback(ligne_texte.get()))
ligne_texte.pack()
fenetre.mainloop()
我试图使用lambda传递参数,但在条目中键入文本时出现以下错误:
Tkinter回调中出现异常
回溯(最近一次呼叫最后一次):
文件“/usr/lib/python2.7/lib-tk/Tkinter.py”,第1413行,在调用中__
返回self.func(*args)
TypeError:()不接受任何参数(给定3个)
我在这里找到一篇帖子,提议用lambda x:
替换lambda:
,但我在TypeError:()中得到了另一个错误,它正好取1个参数(给定3个)
任何解释、来源或信息都将不胜感激:)正如错误消息所说,
StringVar.trace\u变量
由框架用三个参数调用。因此,lambda函数应该接受这三个参数:
lambda name, idx, mode: ...
以下是参数的说明:
- Tk变量的名称。这不是Tk变量对象本身,但您可以使用名称通过root.globalgetvar(名称)和root.globalsetvar(名称)获取或设置值。不幸的是,我没有找到任何方法从Tk变量对象的名称中获取实际的Tk变量对象;nametWidget(varName)似乎不适用于Tk变量
- 变量索引,如果Tk变量是数组,则为空字符串。我不知道如何在Tkinter中创建Tk变量数组(但在Tk中很容易)。如果你弄明白了,你就可以确定索引是一个整数的字符串表示,还是一个整数(我猜它是一个字符串)
- 访问模式为“w”、“r”或“u”中的一种
lambda *args: callback(ligne_texte.get())
可以找到所谓的“splat”操作符(
*
)的文档。谢谢,现在它可以工作了,允许lambda接收这3个参数。谢谢你的医生,好心的先生。