2011-10-10 36 views
0

只是想知道,如何绑定输入字段(与返回键)一个函数,需要2个参数计数事件作为其中之一而不拉姆达或类,只是一个功能和2个参数:如何发送多个参数绑定到python的一个函数2.7.2

def function(event,entry):#entry is the widget to be focused. also, entry is just a place holder NOT A WIDGET. entry MUST be specified. it cannot be removed. 
    entry.focus() 

entry1.bind("<Return>",function(None,entry2)) 

当取值范被绑定,它绑定当它被绑定到执行权和功能则忽略所有的其它输入。它可以让我把字符放到字段中,但是当我打回时,它没有通过并且关注第二个条目。如果我删除None作为参数之一,它会给我一个只定义了两个必需参数中的一个的错误,那么我放入None的位置并不重要,它仍然不起作用。我如何让它在没有类或匿名函数的情况下工作?

回答

3

当你写function(None,entry2)你/是/调用它的时候了 - 该功能可能会返回None,所以基本上你在做什么是:

function(None, entry2) 
entry1.bind("<Return>", None) 

你是什么可能寻找的是:

entry1.bind("<Return>", lambda e: function(entry2)) 

这会产生一个功能(注:生成的功能,但不会称呼它),它有一个参数(事件,“E”),并忽略它

当你然后点击回车键,这样生成的函数将被调用,反过来它会调用function(entry2)

+0

谢谢!这工作,我不得不删除事件作为论据之一!谢谢sooooo多! –

+0

你是否知道如何将参数传递给像上面这样的函数,除了使用Python Mega-Widget Scrolled Listbox(而不是绑定,但是通过使用内置的dblclickcommand = function(1)?因为现在只需调用函数马上,它不工作。 –

-1

没有一个完整的例子,很难提供一个完整的答案。但是有一个很容易修复的常见错误:绑定的第二个参数应该是函数名称,而不是函数调用。

如果更改绑定声明:

entry1.bind("<Return>", function) 

时被触发,而不是当你执行绑定语句返回事件的函数将被调用。

+0

如果什么功能需要2个参数,包括事件作为其中之一吗? –

+0

lambda是正确的答案,但你排除了问题陈述中的lambdas和类。如果由于某种原因你绝对讨厌lambda,那么只需要事件arg调用一个虚拟函数,然后事件arg就会调用实际的函数。 – Dave

相关问题