Tob*_*ski 1 events tkinter event-binding python-2.7
我想使用 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()
这里,回调中的参数事件是不必要的。是否有任何解决方案或解决方法可以防止绑定方法传递事件对象?
我的意思是,我可以这样称呼:
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():
    ...