当我做
def popup(event):
menu.post(event.x_root, event.y_root)
“事件”由PyCharm突出显示,并由python处理。当我做
something.bind("<SomeKey>", foo(event,bar,INSERT))
“事件”未突出显示,但出现异常:
NameError: name 'event' is not defined
这两个有何不同?如果python在第一种情况下隐式地发现了事件,为什么它不能再次做同样的事情?
调用时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
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句