Найти - Пользователи
Полная версия: wx.python как узнать id меню?
Начало » GUI » wx.python как узнать id меню?
1
gistator
Узнать какой из 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)
Т.е. пользователь из списка хозяйств выбирает какое-то одно, но как узнать в каком районе он сделал выбор?
regall
gistator
Т.е. пользователь из списка хозяйств выбирает какое-то одно, но как узнать в каком районе он сделал выбор?
В обработчике события всегда есть
event.GetId()
event.GetObject()
Тут уж как вам удобнее. И это распространяется на все объекты, не только на меню.
gistator
Спасибо. Может быть я вас не понял или плохо объяснил? Но у меня заминка именно в том, что GetId() возвращает мне id пункта из подменю, скажем bgr_m, или gvr_m, а как определить из какого меню этот пункт? Из bgr_m или gvr_m?
PooH
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()
Только зачем оно вам понадобилось?
gistator
Мне нужно сформировать запросы к БД на ввод\вывод. В разных районах имена хозяйств могут быть одинаковыми. Меню двухуровневое Район -> Хозяйства. Чтобы сформировать корректный запрос мне нужно знать и хозяйство и район, в моём случае мне нужно знать меню в котором был выбран пункт ITEM_RADIO и сам этот пункт.
gistator
menu = item.GetMenu()
Отлично - это работает, но почему с menu не работает метод .GetLabel() ?
PooH
gistator
но почему с menu не работает метод .GetLabel() ?
Он вообще-то принимает параметром id пункта в меню и возвращает его текст.
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.
Вы не пробовали читать документацию? Многим помогает…
gistator
Да, я в курсе что он принимает параметром 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()
Ну в общем-то пока решил с помощью .SetTitle() и GetTitle() так что, вопросов то и нет больше - просто интересно, почему для пунктов меню метод .GetLabel() работает и без указания id а для самого меню – нет.
PooH
gistator
просто интересно, почему для пунктов меню метод .GetLabel() работает и без указания id а для самого меню – нет.
Потому что меню и пункт меню экземпляры разных классов wxMenu и wxMenuItem, соответственно. И у wxMenuItem GetLabel не требует параметра. Что логично, потому как меню отображает пункты, и текст он может вернуть для одного из них, который ищет по id, а пункт имеет свой текст.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB