Events 在wxPython中处理事件

Events 在wxPython中处理事件,events,wxpython,Events,Wxpython,如何将参数传递给wxPython中的事件处理程序 这是我的密码: def close_handler(event): baz(foo) ... foo = 'bar' frame.Bind(wx.EVT_CLOSE, close_handler) 如何将foo传递给close\u handler()函数?让close\u handler创建第二个使用foo的事件处理函数: def close_handler(foo): return

如何将参数传递给wxPython中的事件处理程序

这是我的密码:

    def close_handler(event):
        baz(foo)

    ...

    foo = 'bar'
    frame.Bind(wx.EVT_CLOSE, close_handler)

如何将foo传递给
close\u handler()
函数?

close\u handler
创建第二个使用
foo
的事件处理函数:

def close_handler(foo):
    return lambda event: baz(foo)

foo = 'bar'
frame.Bind(wx.EVT_CLOSE, close_handler(foo))
这里的
lambda事件:baz(foo)
是一个匿名函数,它调用
baz(foo)
,默默地丢弃
事件
参数。或者,如果需要,可以将其传递给
baz
lambda事件:baz(foo,event)

您也可以不使用
lambda
编写此代码,如下所示:

def close_handler(foo):
    def event_handler(event):
        return baz(foo)

    return event_handler
或者为了节省一些空间:

import functools

def close_handler(event, foo):
    baz(foo)

frame.Bind(wx.EVT_CLOSE, functools.partial(close_handler, foo='bar'))
import functools

def close_handler(event, foo):
    baz(foo)

frame.Bind(wx.EVT_CLOSE, functools.partial(close_handler, foo='bar'))