rendered paste bodyimport 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)