Привязать несколько 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