使用lambd回调参数

2024-10-05 14:30:43 发布

您现在位置:Python中文网/ 问答频道 /正文

两天前我启动了Python(2.7.3),我需要在GUI回调函数中使用参数。我一直在这里寻找关于efffbot的任何信息,但我找不出我的情况有什么不对。在

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来传递我的param,但是当我在条目中输入文本时,出现了这个错误:

^{pr2}$

我在这里找到了一篇文章,建议用lambda x:代替lambda:,但是我发现另一个错误是TypeError: <lambda>() takes exactly 1 argument (3 given)

如有任何解释、来源或信息,我们将不胜感激:)


Tags: lambda函数from信息参数var错误callback
2条回答

如错误消息所示,StringVar.trace_variable由框架用三个参数调用。所以lambda函数应该接受这三个参数:

lambda name, idx, mode: ...

http://staff.washington.edu/rowen/ROTKFolklore.html这里是参数的描述:

  • Tk变量的名称。这不是Tk变量对象本身,但是您可以使用名称通过根.globalgetvar(姓名)和根.globalsetvar(姓名)。不幸的是,我没有找到任何方法从它的名称中获取实际的Tk变量对象;root.nametowidget(varName)似乎不适用于Tk变量。在
  • 变量索引,如果Tk变量是数组,则为空字符串。我不知道如何在Tkinter中创建Tk变量数组(但在Tk中很容易)。如果你弄清楚了,你就可以确定索引是一个整数的字符串表示,还是一个整数(我猜它是一个字符串)。在
  • 访问模式,w、r或u之一。在

如果您对传递给回调的参数不感兴趣,可以使用:

lambda *args: callback(ligne_texte.get())

所谓的“splat”操作符(*)的文档可以在here找到。在

相关问题 更多 >