1

我想使用 Tkinter 将方法绑定到事件,但我不需要“绑定”方法传递的事件对象。为了清楚起见,一些代码:

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 不带参数)。

4

1 回答 1

4

正如我所见,您有三个广泛的选择(按照复杂性增加的顺序):

  1. 使用被忽略的约定变量名_

    def callback2(_):
        ...  
    
  2. 绑定回调时包装回调:

    frame.bind('...', lambda event: callback2())
    
  3. 编写一个装饰器来event为你忽略参数:

    def no_event(func):
        @functools.wraps(func)
        def wrapper(event):
            return func()
        return wrapper
    

    然后将其应用于不需要事件的回调方法:

    @no_event
    def callback2():
        ...
    
于 2015-10-22T14:56:37.243 回答