处理wxPython中的事件

时间:2009-08-20 20:01:42

标签: events wxpython

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

这是我的代码:

    def close_handler(event):
        baz(foo)

    ...

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

如何将foo传递给close_handler()函数?

2 个答案:

答案 0 :(得分:4)

import functools

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

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

或者为了节省一些空间:

import functools

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

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

答案 1 :(得分:2)

close_handler创建使用foo的第二个事件处理函数:

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

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

此处lambda event: baz(foo)是一个匿名函数,它调用baz(foo),默默地丢弃event参数。或者,如果您愿意,可以将其传递给bazlambda event: baz(foo, event)

您也可以不使用lambda这样写:

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

    return event_handler