如何向Tkinter的“bind”回调函数传递参数?

4

I have this code:

#!/usr/bin/python3
from Tkinter import *

def keypress(key):
    print key, "pressed"

if __name__ == '__main__':
   root = Tk()
   root.bind('<Return>', keypress(key="enter"))
   root.bind('a', keypress(key="a"))
   root.mainloop()

我注意到该函数在程序启动时立即被调用;如何使其在不立即调用的情况下将参数传递给keypress函数?
1个回答

7
在您的bind函数调用中,实际上是先调用函数,然后绑定函数的结果(即None)。您需要直接绑定函数。一种解决方法是使用lambda
示例 -
root.bind('<Return>', lambda event: keypress(key="enter"))
root.bind('a', lambda event: keypress(key="a"))

如果您想将 event 参数传递给 keypress() 函数,您需要在函数中定义该参数,然后进行传递。例如 -
def keypress(event, key):
    print key, "pressed"
...
root.bind("<Return>", lambda event: keypress(event, key="enter"))
root.bind("a", lambda event: keypress(event, key="a"))

是的,我知道它在做什么,只是不知道如何修复它。非常感谢! :) - Pigman168
是的,我确实是。抱歉,请等一下,我会在问题中放更新后的代码。 - Pigman168
Lambda函数还需要接受一个参数,我已经更新了代码,请现在尝试。 - Anand S Kumar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接