2012-03-13 2 views
1

Если у меня есть два объекта, которые будут называть тот же метод, то произойдет событие, можно ли увидеть, кто из них вызвал событие?Получить объект, вызывающий событие

Чтобы сделать его cleaer. Если у меня есть две кнопки и один метод, который вызывается, я нажимаю на них. Что я могу сделать в этом методе, чтобы увидеть кнопку щелчка, которая была нажата?

... 
buttonA.Bind(wx.EVT_BUTTON ,self.methode) 
buttonB.Bind(wx.EVT_BUTTON ,self.methode) 
... 
... 
def methode(self,event) 
    #get the button that was clicked 

ответ

4

Попробуйте это:

... 
buttonA.Bind(wx.EVT_BUTTON ,self.methode) 
buttonB.Bind(wx.EVT_BUTTON ,self.methode) 
... 
... 
def methode(self, event) 
    #get the button that was clicked 
    button = event.GetEventObject() 

    print button.GetLabel() 
+0

Спасибо, что я искал – nist

0

Самый простой подход должен был бы создать два отдельных методов:

buttonA.Bind(wx.EVT_BUTTON, self.method_from_A) 
buttonB.Bind(wx.EVT_BUTTON, self.method_from_B) 

Если эти два метода кода доли, то они оба могли назвать какой-либо другой вспомогательный метод.

Вместо того, чтобы называть их чем-то произвольным, как method_from_X, попробуйте выбрать имена, которые уточнят, почему случаи разные. Для имен сосредоточьтесь на «почему», а не на деталях реализации.

Если вы действительно хотите иметь один метод обратного вызова, вы можете следовать инструкциям здесь Передача аргументов в обратные вызовы:

http://wiki.wxpython.org/Passing%20Arguments%20to%20Callbacks

+0

Что делать, если я получил больше чем два объекта (Кнопки), скажем, 100, тогда мне пришлось бы создать 100 вспомогательных методов. Это создаст много бессмысленного кода – nist

+0

Вы не указали много информации о вашем прецеденте. В общем, наличие взаимно однозначной взаимосвязи между кнопками и методами сделает ваш код намного читабельнее. Не могли бы вы дать больше информации о том, что вы пытаетесь сделать и почему? – amcnabb

Смежные вопросы