2009-08-20 2 views
2

wxPython의 이벤트 처리기에 인수를 전달하는 방법은 무엇입니까?wxPython의 이벤트 처리

def close_handler(event): 
     baz(foo) 

    ... 

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

방법 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)가 자동으로 event 인수를 폐기, baz(foo)를 호출하는 익명 함수입니다 :

답변

2

close_handlerfoo를 사용하는 두 번째 이벤트 처리 함수를 작성하게한다. 또는 원하는 경우 baz으로 전달할 수 있습니다. lambda event: baz(foo, event).

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) 

또는 일부 공간 절약 :

또한과 같이 lambda를 사용하지 않고이 쓸 수

import functools 

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

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