当我这样做时
def popup(event):
menu.post(event.x_root, event.y_root)
'事件'由PyCharm突出显示并由python处理好。 当我做的时候
something.bind("<SomeKey>", foo(event,bar,INSERT))
&#39;事件&#39;没有突出显示,我得到例外:
NameError: name 'event' is not defined
这两者有何不同?如果python在第一种情况下隐式发现事件,为什么它不能再次执行相同的操作呢?
答案 0 :(得分:1)
当你致电bind
时,你必须给它一个可以在以后调用的东西的参考。您没有这样做 - 您在致电foo
时呼叫bind
。因为您正在调用该函数,所以当时变量event
不存在,因此您会收到错误。
最好的办法是定义foo
,这样你就不需要传递参数。从一般意义上来说,它本身并不是最好的,当你第一次学习Tkinter时最好。由于tkinter会自动传递一个事件对象,因此您需要它接受该参数,但您不需要明确地传递该参数。
例如:
def foo(event):
global bar
<do something with event, bar and INSERT>
something.bind("<SomeKey>", foo)
请注意bind
语句中没有额外的括号。 foo
函数传递给bind
命令,tkinter在调用foo
时会自动包含一个事件对象。