Привязать несколько wx.EVT_MENU к одному и тому же методу?

Во всплывающем окне при щелчке правой кнопкой мыши находится около 5-6 пунктов меню, и привязка их к отдельным методам кажется неуклюжей, поскольку есть хороший кусок кода, который можно использовать повторно, возможно ли делать такие вещи?

self.Bind(wx.EVT_MENU, self.MenuClicked, id=self.menu1)
self.Bind(wx.EVT_MENU, self.MenuClicked, id=self.menu2)
self.Bind(wx.EVT_MENU, self.MenuClicked, id=self.menu3)
self.Bind(wx.EVT_MENU, self.MenuClicked, id=self.menu4)
self.Bind(wx.EVT_MENU, self.MenuClicked, id=self.menu5)

def MenuClicked(self, event):
    detect which menu being clicked
    assign specific values to several variables regarding the menu being clicked

    rest of the codes.

Я заметил, что нет GetMenu() доступны для wx.EVT_MENUИтак, в основном, как вы узнаете, какое меню нажимается?

2 ответа

Решение

Я предпочитаю связывать их с отдельными методами, но у каждого есть свои:) Вы можете использовать метод GetId() для события, а затем сравнить его с вашими пунктами меню.

def MenuClicked(self, event):
    id_selected = event.GetId()

Есть много способов сделать это, но стандартный и общий подход заключается в использовании functools.partial:

f = functools.partial(self.MenuClicked, my_id_1)
self.Bind(wx.EVT_MENU, f, id=self.menu1)

где my_id_1 это какой-то идентификатор, возможно self.menu1, если хотите, а затем в другом месте:

def MenuClicked(self, my_id, evt):
    print my_id
Другие вопросы по тегам