#!/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()
答案 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"))