2014-01-07 2 views
0

Я пытаюсь отделить GUI и логику в приложении wxPython с помощью python 2.7.5. Поскольку wxPython использует привязку событий, я думал, что продолжу этот подход. Резюмируя мой код:Анонимные функции обратного вызова в Python 2.7.5?

GUI.py

class MainInterface(): 
    def __SetupControlPanel(self, controlPanel): 
     self.DoSomethingButton = wx.Button(controlPanel, wx.ID_ANY, "Do something") 

    def BindCallback_DoSomething(self, callback): 
     self.frame.Bind(wx.EVT_BUTTON, callback, self.DoSomethingButton) 

main.py

def DoSomething(event): 
    someLogicClass.DoSomething() 

interface.BindEvent_DoSomething(DoSomething) 

Это разъединяет две части приложения красиво, но мне не нравится, как я должен определить отдельную функцию main.py для каждого обратного вызова, поскольку она обычно просто вызывает одну логическую функцию. С фона JS я привык использовать анонимную функцию. Я бы себе представить, что-то, как это будет делать мой код несколько более компактно:

interface.BindEvent_DoSomething(def (event): 
    someLogicClass.DoSomething() 
) 

Есть ли способ, чтобы достичь такого синтаксиса в Python?

+1

лямбда? – M4rtini

+1

Вы искали "анонимные функции python"? – Blender

+0

У меня есть, но ни один из примеров функции лямбда, которые я нашел, не показал, что можно просто вызвать метод ... думаю, я пропустил его. Благодарю. – Korijn

ответ

1

Вы можете использовать функцию лямбда

interface.BindEvent_DoSomething(lambda e: doSomething()) 
3

Вы можете попробовать с лямбда-функции: функции

interface.BindEvent_DoSomething(lambda event: someLogicClass.DoSomething()) 
Смежные вопросы