Wirklich mal nur ein Code-Schnipsel: Ich habe eine Stück Code ein wenig re-factored und zeige einfach mal, was dabei rausgekommen ist, bzgl. einer MenuBar. Meine Motivation ist es einfach mal etwas Ordnung in meinen Code zu bekommen und - ohne jemanden zu nahe treten zu wollen - ich denke anderen wx-Nutzern hier könnten vielleicht auch Interesse haben.

Code: Alles auswählen
def build_one_menu(parent,itemlist):
"""
builds one menu
"""
menu = wx.Menu()
for item in itemlist:
#print item
#item == empty list?
if len(item) == 0:
menu.AppendSeparator()
#item[0] == menu itself? => Append submenu!
elif type(item[0]) == type(wx.Menu()):
menu.AppendMenu(-1,item[1],item[0])
else:
#itemlist = [name,status bar text,method to bind,CheckItem,CheckFlag,EnableFlag]
#ckecked?
if type(item[3]) == type(wx.ITEM_CHECK):
x = menu.Append(-1,item[0],item[1],item[3])
x.Check(item[4])
else:
x = menu.Append(-1,item[0],item[1])
#enable?
x.Enable(item[5])
parent.Bind(wx.EVT_MENU,item[2],x)
return menu
def PopulateMenuBar(parent):
"""
Popluates SPlot's MenuBar
expects parent class
"""
<snip>
#menulist = (name,status bar text,method to bind,CheckItem,CheckFlag,EnableFlag)
############## build menu 4 ##############
submenu4list = (
("Show &Grid","Turn Grid in plot on / off",parent.OnGridCheck,wx.ITEM_CHECK,True,True),
("Increase Text Size\tCtrl++","Increase Text Size in all Plots",parent.OnChangeSize,'','',True),
("Decrease Text Size\tCtrl+-","Decrease Text Size in all Plots",parent.OnChangeSize,'','',True),
(),
("Color Plot Option","Plot with colors or black & white",parent.OnColorPlot,wx.ITEM_CHECK,False,True),
("&Plot Error Bars","Plot with an error bar estimate",parent.OnErrorBarPlot,wx.ITEM_CHECK,False,True)
)
submenu4 = build_one_menu(parent,submenu4list)
menu4list = (
("&Save Plot to Image","Save current plot",parent.OnSavePlot,'','',True),
("&Refresh\tCtrl+R","Redraw Plotting Window",parent.OnRefresh,'','',True),
(submenu4,"&View Options"),
(),
("&Log Intensity\tCtrl+L","Show the logarithm of the intensity",parent.OnSetLog,wx.ITEM_CHECK,True,False),
(),
("Show Energy","Show Energy Distribution Plot",parent.OnPlotEnergy ,wx.ITEM_CHECK,False,False),
("Log Energy","Show the logarithm of the energy distribution plot",parent.OnSetLogEnergy ,wx.ITEM_CHECK,False,False)
)
menu4 = build_one_menu(parent,menu4list)
############## menu 4 ready ##############
<snip>
menuBar = wx.MenuBar()
menuBar.Append(menu1,"&File")
menuBar.Append(menu2,"&Evaluate")
menuBar.Append(menu3,"&Desmearing")
menuBar.Append(menu4,"&View")
menuBar.Append(menu5,"&Help")
parent.SetMenuBar(menuBar)
bekommen, daß es noch übersichtlicher geht ...

CHECK_ITEMs und teilw. ausgegrauten Menüoptionen.
Später im Mainframe kommt man beispielsweise so an die ehemals "disabelten" Menüpunkte:
Code: Alles auswählen
id = self.GetMenuBar().FindMenuItem("View","Log Intensity")
self.GetMenuBar().Enable(id,True)
Ich würde mich auch freuen, wenn mir jemand einen Tipp gibt es noch besser zu ordnen

Gruß,
Christian
edit: Einige für mich sinnlose &s herausgenommen.