如何防止 Tkinter 在绑定中传递事件对象?有什么解决方法吗?
How can I prevent Tkinter from passing the event object in a binding? Is there any workaround to do this?
我想使用 Tkinter 将方法绑定到事件,但我不需要 'bind' 方法传递的事件对象。
为清楚起见,一些代码:
from Tkinter import *
root = Tk()
def callback(event):
print 'clicked!'
frame = Frame(root, width=100, height=100)
frame.bind('<Button-1>', callback)
frame.pack()
root.mainloop()
这里callback中的参数event是不需要的。是否有任何解决方案或解决方法来防止绑定方法传递事件对象?
我的意思是,我可以这样称呼吗:
def callback2():
print 'clicked!'
绑定?类似于:
frame.bind('<Button-2>', callback2)
(这实际上不起作用,因为 bin 传递了事件,但 callback2 没有参数)。
如我所见(按照复杂性递增的顺序),您有三个广泛的选择:
使用约定忽略的变量名_
:
def callback2(_):
...
绑定时包装回调:
frame.bind('...', lambda event: callback2())
写个装饰器给你忽略event
参数:
def no_event(func):
@functools.wraps(func)
def wrapper(event):
return func()
return wrapper
然后将其应用于不需要该事件的回调方法:
@no_event
def callback2():
...
我想使用 Tkinter 将方法绑定到事件,但我不需要 'bind' 方法传递的事件对象。 为清楚起见,一些代码:
from Tkinter import *
root = Tk()
def callback(event):
print 'clicked!'
frame = Frame(root, width=100, height=100)
frame.bind('<Button-1>', callback)
frame.pack()
root.mainloop()
这里callback中的参数event是不需要的。是否有任何解决方案或解决方法来防止绑定方法传递事件对象?
我的意思是,我可以这样称呼吗:
def callback2():
print 'clicked!'
绑定?类似于:
frame.bind('<Button-2>', callback2)
(这实际上不起作用,因为 bin 传递了事件,但 callback2 没有参数)。
如我所见(按照复杂性递增的顺序),您有三个广泛的选择:
使用约定忽略的变量名
_
:def callback2(_): ...
绑定时包装回调:
frame.bind('...', lambda event: callback2())
写个装饰器给你忽略
event
参数:def no_event(func): @functools.wraps(func) def wrapper(event): return func() return wrapper
然后将其应用于不需要该事件的回调方法:
@no_event def callback2(): ...