# call: self.CreateMenu(self.MenuTuple()) def MenuTuple(self): return ( ("p1", ("p1c1", "p1c2", self.OnQuit), ("p1c12", "p1c22", self.OnQuit), ("p1c13", "p1c23", self.OnQuit), ), ("p2", ("p2c1", "p2c2", self.OnQuit), ("p2c12p1", ("p2c12p1c1", "p2c12p1c2", self.OnQuit), ), ) ) def CreateMenu(self, data): menu = {} menuBar = wx.MenuBar() if self.isTuple(data): for elements in data: parent, childs = elements[0], elements[1:] menu[parent] = wx.Menu() menuBar.Append(menu[parent], parent) for elements in childs: if self.isTuple(elements[1]): subParent, childs = elements[0], elements[1:] menu[subParent] = wx.Menu() menu[parent].AppendMenu(wx.NewId(),subParent,menu[subParent]) for elements in childs: label, status, handler = elements menuItem = menu[subParent].Append(wx.NewId(), label, status) self.Bind(wx.EVT_MENU, handler, menuItem) else: label, status, handler = elements menuItem = menu[parent].Append(wx.NewId(), label, status) self.Bind(wx.EVT_MENU, handler, menuItem) self.SetMenuBar(menuBar) def isTuple(obj): import types return type(obj) == types.TupleType