2009-08-20 82 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'))