gpt4 book ai didi

python - 在 wxPython 中找出嵌套的子菜单选择?

转载 作者:行者123 更新时间:2023-12-04 14:42:58 24 4
gpt4 key购买 nike

假设在一个更大的 3 层深度的子菜单结构中,我在第一层选择了 'car',在第二层选择了 'type',并且'suv' 在第三个也是最后一个级别。有什么方法可以在我的 def OnPopupItemSelected(self, event) 方法中计算出所有这三个选择?

我希望我已经说得足够清楚了,如果没有,请添加评论以便我重新措辞。

最佳答案

在 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")

我想肯定给定了“点击”的菜单项,你可以向后移动子菜单。这似乎不是这种情况,因为单击的菜单项仅包含对其父菜单的引用,而不是它作为子菜单的菜单项。

所以,我能编写的最好的代码是一个令人讨厌的递归函数,该函数从上到下遍历以找到单击的子菜单。

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']

关于python - 在 wxPython 中找出嵌套的子菜单选择?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3658747/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com