import wx import pprint # Usage in main Frame # gen = MenuGenerator() # fileMenu = gen.NewTopMenu("File") # gen.NewMenu(fileMenu, "Quit", handler=self.OnQuit) # gen.ConstructMenu() # self.SetMenuBar(gen.GetMenuBar()) class MenuGenerator(wx.Menu, wx.Frame): def __init__(self): wx.Menu.__init__(self) self.menuDict = {} self.menuBar = wx.MenuBar() def GetMenuBar(self): return self.menuBar def NewTopMenu(self, newMenu): wxMenu = wx.Menu() self.menuDict[newMenu] = { "name": newMenu, "wxMenu": wxMenu, "parent": self.menuBar, } return wxMenu def NewMenu(self, parent, newMenu, status="", handler=None, image=None): wxMenu = wx.Menu() self.menuDict[newMenu] = { "name": newMenu, "wxMenu": wxMenu, "parent": parent, "status": status, "handler": handler, "image": image, } return wxMenu def ConstructMenu(self): for newMenu, menuData in self.menuDict.items(): if menuData["parent"] == self.menuBar: self.menuBar.Append(menuData["wxMenu"], menuData["name"]) else: if menuData["image"] is not None: menuItem = self.MenuImager(menuData["wxMenu"], menuData["name"], menuData["status"], menuData["image"]) menuData["parent"].AppendItem(menuItem) else: menuItem = menuData["parent"].Append(wx.NewId(), menuData["name"], menuData["status"]) if menuData["handler"] is not None: self.Bind(wx.EVT_MENU, menuData["handler"], menuItem) def MenuImager(self, menu, name, status, image): menuItem = wx.MenuItem(menu, wx.NewId(),name, status) menuItem.SetBitmap(wx.Image(image, wx.BITMAP_TYPE_PNG).ConvertToBitmap()) return menuItem def Print(self): pprint.pprint(self.menuDict)