在Python中传递参数绑定函数

时间:2015-10-22 08:38:48

标签: python tkinter

#!/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函数而不立即调用它。有人可以解释一下如何解决它吗?

更新代码:

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

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


root = Tk()
root.bind("<Return>", lambda event: keypress(key="enter"))
root.bind("a", lambda event: keypress(key="a"))
root.mainloop()

1 个答案:

答案 0 :(得分:4)

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"))