Форум сайта python.su
Узнать какой из wx.ITEM_RADIO выбрал пользователь я могу:
menubar = self.GetMenuBar()
itemId = event.GetId()
item = menubar.FindItemById(itemId)
def TenInput(self, event):
fnx = processing.DBProcessing()
farm = fnx.FarmNameExtract("1")
bgr_m = wx.Menu()
self.id = []
for count in farm:
rmenu = bgr_m.Append(wx.NewId(), count[1], "", wx.ITEM_RADIO)
self.id.append(rmenu.GetId())
self.Bind(wx.EVT_MENU, self.AreaMenuHandler, id=rmenu.GetId())
farm = fnx.FarmNameExtract("2")
gvr_m = wx.Menu()
for loo in farm:
gvr_m.Append(wx.NewId(), loo[1], "", wx.ITEM_RADIO)
self.id.append(rmenu.GetId())
self.Bind(wx.EVT_MENU, self.AreaMenuHandler, id=rmenu.GetId())
farm_m = wx.Menu()
self.menuBar.Append(farm_m, "Район")
farm_m.AppendMenu(2, u"Багратионовский район", bgr_m)
farm_m.AppendMenu(3, u"Гвардейский район", gvr_m)
Офлайн
gistatorВ обработчике события всегда есть
Т.е. пользователь из списка хозяйств выбирает какое-то одно, но как узнать в каком районе он сделал выбор?
event.GetId()
event.GetObject()
Офлайн
Спасибо. Может быть я вас не понял или плохо объяснил? Но у меня заминка именно в том, что GetId() возвращает мне id пункта из подменю, скажем bgr_m, или gvr_m, а как определить из какого меню этот пункт? Из bgr_m или gvr_m?
Офлайн
gistator
Но у меня заминка именно в том, что GetId() возвращает мне id пункта из подменю, скажем bgr_m, или gvr_m, а как определить из какого меню этот пункт? Из bgr_m или gvr_m?
wxMenuItem::GetMenu
wxMenu* GetMenu() const
Returns the menu this menu item is in, or NULL if this menu item is not attached.
menubar = self.GetMenuBar()
itemId = event.GetId()
item = menubar.FindItemById(itemId)
menu = item.GetMenu()
Отредактировано (Янв. 24, 2011 11:28:06)
Офлайн
Мне нужно сформировать запросы к БД на ввод\вывод. В разных районах имена хозяйств могут быть одинаковыми. Меню двухуровневое Район -> Хозяйства. Чтобы сформировать корректный запрос мне нужно знать и хозяйство и район, в моём случае мне нужно знать меню в котором был выбран пункт ITEM_RADIO и сам этот пункт.
Офлайн
menu = item.GetMenu()
Офлайн
gistatorОн вообще-то принимает параметром id пункта в меню и возвращает его текст.
но почему с menu не работает метод .GetLabel() ?
wxMenu::GetLabelВы не пробовали читать документацию? Многим помогает…
wxString GetLabel(int id) const
Returns a menu item label.
Parameters
id
The menu item identifier.
Return value
The item label, or the empty string if the item was not found.
Офлайн
Да, я в курсе что он принимает параметром id, для этого даже не надо было читать документацию, мне интерпритатор “тонко” намекнул, просто я в замешательстве, почему такая конструкция работает (без передачи id):
menubar = self.GetMenuBar()
itemId = event.GetId()
item = menubar.FindItemById(itemId)
farm = item.GetLabel()
menubar = self.GetMenuBar()
itemId = event.GetId()
item = menubar.FindItemById(itemId)
menu = item.GetMenu()
area = menu.GetLabel()
Офлайн
gistatorПотому что меню и пункт меню экземпляры разных классов wxMenu и wxMenuItem, соответственно. И у wxMenuItem GetLabel не требует параметра. Что логично, потому как меню отображает пункты, и текст он может вернуть для одного из них, который ищет по id, а пункт имеет свой текст.
просто интересно, почему для пунктов меню метод .GetLabel() работает и без указания id а для самого меню – нет.
Отредактировано (Янв. 25, 2011 11:31:16)
Офлайн