深さ 3 レベルの大きなサブメニュー構造で'car'
、最初のレベル、'type'
2 番目、'suv'
3 番目と最後のレベルで選択したとします。私のdef OnPopupItemSelected(self, event)
方法でこれら3つの選択すべてを理解する方法はありますか?
私は自分自身を十分に明確にしたことを願っています.
wxPythonデモでは、子の親の方法でIDを「コーディング」しているように見えます。
# top level menu
menu1 = wx.Menu()
menu1.Append(11,"11")
menu1.Append(12, "12")
# sub menu 1
menu2 = wx.Menu()
menu2.Append(131, "131")
menu2.Append(132, "132")
menu1.AppendMenu(13,"13",menu2)
# sub menu 2
menu3 = wx.Menu()
menu3.Append(1321,"1321")
menu3.Append(1322,"1322")
menu3.Append(1323,"1323")
menu2.AppendMenu(132, "132", menu3)
# add top to menubar
menubar.Append(menu1, "&Top")
「クリックされた」メニュー項目があれば、サブメニューを逆方向に歩くことができると思いました。クリックされたmenuitemは、その親メニューへの参照のみを保持し、サブメニューであるmenuitemは保持しないため、これは当てはまらないようです。
したがって、私がコーディングできる最善の方法は、クリックされたサブメニューを見つけるために上下に移動する厄介な再帰関数でした。
def MenuClick(self, event):
def _menuItemSearch(menu,subMenuTree ,id):
if not menu.FindItemById(id): return False
# it is in this menu
for menuItem in menu.MenuItems:
if menuItem.GetId() == id:
subMenuTree.append(menuItem.GetLabel())
return True
if menuItem.GetSubMenu():
if _menuItemSearch(menuItem.GetSubMenu(),subMenuTree,id):
subMenuTree.append(menuItem.GetLabel())
return True
return False
subMenuTree = []
for menu,name in self.GetMenuBar().GetMenus():
_menuItemSearch(menu,subMenuTree,event.Id)
print subMenuTree
[u'1321', u'132', u'13']