2009-08-20 11 views
2

Wie Übergeben eines Arguments an einen Ereignishandler in WxPython?Behandeln von Ereignissen in WxPython

Hier ist mein Code:

def close_handler(event): 
     baz(foo) 

    ... 

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

Wie foo close_handler() Funktion zu übergeben?

Antwort

2

Haben close_handler eine zweite Ereignisbehandlungsfunktion erstellen, die foo verwendet:

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

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

Hier lambda event: baz(foo) ist eine anonyme Funktion, die baz(foo) nennt, leise das event Argument zu verwerfen. Oder Sie könnten es an baz übergeben, wenn Sie wollten: lambda event: baz(foo, event).

Sie können diese schreiben, ohne lambda mit etwa so:

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) 

Oder, um Platz zu sparen:

import functools 

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

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