Уведомления

Группа в Telegram: @pythonsu

#1 Янв. 24, 2011 09:54:35

gistator
От:
Зарегистрирован: 2010-11-19
Сообщения: 18
Репутация: +  0  -
Профиль   Отправить e-mail  

wx.python как узнать id меню?

Узнать какой из 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)
Т.е. пользователь из списка хозяйств выбирает какое-то одно, но как узнать в каком районе он сделал выбор?



Офлайн

#2 Янв. 24, 2011 10:22:53

regall
От: Киев
Зарегистрирован: 2008-07-17
Сообщения: 1583
Репутация: +  3  -
Профиль   Отправить e-mail  

wx.python как узнать id меню?

gistator
Т.е. пользователь из списка хозяйств выбирает какое-то одно, но как узнать в каком районе он сделал выбор?
В обработчике события всегда есть
event.GetId()
event.GetObject()
Тут уж как вам удобнее. И это распространяется на все объекты, не только на меню.



Офлайн

#3 Янв. 24, 2011 10:55:34

gistator
От:
Зарегистрирован: 2010-11-19
Сообщения: 18
Репутация: +  0  -
Профиль   Отправить e-mail  

wx.python как узнать id меню?

Спасибо. Может быть я вас не понял или плохо объяснил? Но у меня заминка именно в том, что GetId() возвращает мне id пункта из подменю, скажем bgr_m, или gvr_m, а как определить из какого меню этот пункт? Из bgr_m или gvr_m?



Офлайн

#4 Янв. 24, 2011 11:26:23

PooH
От:
Зарегистрирован: 2006-12-05
Сообщения: 1948
Репутация: +  72  -
Профиль   Отправить e-mail  

wx.python как узнать id меню?

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)

Офлайн

#5 Янв. 24, 2011 11:51:56

gistator
От:
Зарегистрирован: 2010-11-19
Сообщения: 18
Репутация: +  0  -
Профиль   Отправить e-mail  

wx.python как узнать id меню?

Мне нужно сформировать запросы к БД на ввод\вывод. В разных районах имена хозяйств могут быть одинаковыми. Меню двухуровневое Район -> Хозяйства. Чтобы сформировать корректный запрос мне нужно знать и хозяйство и район, в моём случае мне нужно знать меню в котором был выбран пункт ITEM_RADIO и сам этот пункт.



Офлайн

#6 Янв. 24, 2011 14:34:58

gistator
От:
Зарегистрирован: 2010-11-19
Сообщения: 18
Репутация: +  0  -
Профиль   Отправить e-mail  

wx.python как узнать id меню?

menu = item.GetMenu()
Отлично - это работает, но почему с menu не работает метод .GetLabel() ?



Офлайн

#7 Янв. 24, 2011 17:46:47

PooH
От:
Зарегистрирован: 2006-12-05
Сообщения: 1948
Репутация: +  72  -
Профиль   Отправить e-mail  

wx.python как узнать id меню?

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.
Вы не пробовали читать документацию? Многим помогает…



Вот здесь один из первых отарков съел лаборанта. Это был такой умный отарк, что понимал даже теорию относительности. Он разговаривал с лаборантом, а потом бросился на него и загрыз…

Офлайн

#8 Янв. 25, 2011 08:52:24

gistator
От:
Зарегистрирован: 2010-11-19
Сообщения: 18
Репутация: +  0  -
Профиль   Отправить e-mail  

wx.python как узнать id меню?

Да, я в курсе что он принимает параметром 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 а для самого меню – нет.



Офлайн

#9 Янв. 25, 2011 11:30:16

PooH
От:
Зарегистрирован: 2006-12-05
Сообщения: 1948
Репутация: +  72  -
Профиль   Отправить e-mail  

wx.python как узнать id меню?

gistator
просто интересно, почему для пунктов меню метод .GetLabel() работает и без указания id а для самого меню – нет.
Потому что меню и пункт меню экземпляры разных классов wxMenu и wxMenuItem, соответственно. И у wxMenuItem GetLabel не требует параметра. Что логично, потому как меню отображает пункты, и текст он может вернуть для одного из них, который ищет по id, а пункт имеет свой текст.



Вот здесь один из первых отарков съел лаборанта. Это был такой умный отарк, что понимал даже теорию относительности. Он разговаривал с лаборантом, а потом бросился на него и загрыз…

Отредактировано (Янв. 25, 2011 11:31:16)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version