2009-08-20 59 views
2

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

这里是我的代码:

def close_handler(event): 
     baz(foo) 

    ... 

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

如何通过富到close_handler()功能?

回答

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 
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'))