معرفة اختيارات القائمة الفرعية المتداخلة في Wxpython؟

StackOverflow https://stackoverflow.com/questions/3658747

  •  01-10-2019
  •  | 
  •  

سؤال

دعنا نقول في بنية قائمة فرعية أكبر بعمق 3 مستويات ، لقد اخترت 'car' في المستوى الأول ، 'type' في الثانية ، و 'suv' في المستوى الثالث والأخير. هل هناك أي طريقة يمكنني من خلالها تحديد كل هذه الاختيارات الثلاثة في بلدي def OnPopupItemSelected(self, event) طريقة؟

آمل أن أكون قد أوضحت نفسي بما فيه الكفاية ، إن لم يكن ، يرجى إضافة تعليق حتى أتمكن من إعادة صياغة.

هل كانت مفيدة؟

المحلول

يبدو أنه في عرض Wxpython أنها "رمز" المعرفات بأسلوب والد الطفل:

# 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 الذي تم النقر عليه يحمل فقط إشارة إلى القائمة الوالدية وليس 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']
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top