如何在Python 2.7.2中将多个参数绑定到小部件函数?
我在想,怎么才能把一个输入框和一个需要两个参数的函数(其中一个参数是事件)绑定在一起,而且不使用lambda或者类,只用一个函数和两个参数呢?
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))
当我把输入框entry1绑定上去的时候,绑定的那个函数会立刻执行一次,然后就不再处理其他输入了。虽然我可以在输入框里输入字符,但当我按下回车键时,它并不会继续执行,也不会把焦点转到第二个输入框。如果我把None这个参数去掉,就会报错,说两个必需的参数中只有一个被定义了。不管我用什么替代None,它还是不管用。我该怎么做才能在不使用类或匿名函数的情况下让它工作呢?
3 个回答
-1
没有完整的例子,很难给出全面的回答。不过,有一个常见的错误很容易解决:bind的第二个参数应该是一个函数的名字,而不是函数的调用。
如果你把bind的写法改成:
entry1.bind("<Return>", function)
那么这个函数会在触发Return事件时被调用,而不是在你执行bind语句的时候被调用。
1
答案是使用 lambda
。想要更好的理解,可以查看 Tkinter 回调 在 effbot.org 上的内容。
3
当你写 function(None,entry2)
的时候,其实是在立即调用这个函数。这个函数可能会返回 None
,所以你实际上是在做:
function(None, entry2)
entry1.bind("<Return>", None)
你可能想要的是这个:
entry1.bind("<Return>", lambda e: function(entry2))
这个会生成一个函数(注意:是生成函数,而不是调用它),这个函数接受一个参数(事件,"e"),并且会忽略这个参数
当你按下回车键的时候,这个生成的函数会被调用,然后它会进一步调用 function(entry2)