Получить объект, который вызывает событие

1

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

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

...
buttonA.Bind(wx.EVT_BUTTON ,self.methode)
buttonB.Bind(wx.EVT_BUTTON ,self.methode)
...
...
def methode(self,event)
  #get the button that was clicked 
Теги:
events
wxpython

2 ответа

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
    Спасибо это то что я искал
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 вспомогательных методов. Это создаст много бессмысленного кода
  • 0
    Вы не предоставили много информации о вашем случае использования. В общем, наличие взаимно-однозначного отношения между кнопками и методами сделает ваш код более читабельным. Не могли бы вы дать больше информации о том, что вы пытаетесь сделать и почему?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню