我試圖找到一種方式來凝聚和自動化主菜單的結構(標題欄的下方,與文件,編輯,幫助等)在wxPython中。自動化wxPython主菜單設置?
寫出每一個菜單項都是直接的,但我注意到我在重複自己,重複添加,排序ID等等之後,跟着其他獨特的坑,如果我想添加一個圖標到特定的菜單,或如果我有子菜單,並且它們可能有子菜單等。如果沒有一個一致的方法來逐項列出所有內容,只需將信息添加到列表或字典或兩者的組合中,我的wx.Frame對象就會變得非常密集。
我看不到一個乾淨的有組織的方式做到這一點,缺乏一個三維數組。即使如此,我也不知道如何統一組織這個3D陣列,所以每個項目都準備好了。
這裏是我到目前爲止(請原諒任何縮進錯誤;它正常工作對我):
class frameMain(wx.Frame):
"""The main application frame."""
def __init__(self,
parent=None,
id=-1,
title='TITLE',
pos=wx.DefaultPosition,
size=wx.Size(550, 400),
style=wx.DEFAULT_FRAME_STYLE):
"""Initialize the Main frame structure."""
wx.Frame.__init__(self, parent, id, title, pos, size, style)
self.Center()
self.CreateStatusBar()
self.buildMainMenu()
def buildMainMenu(self):
"""Creates the main menu at the top of the screen."""
MainMenu = wx.MenuBar()
# Establish menu item IDs.
menuID_File = ['exit']
menuID_Help = ['about']
menuID_ALL = [menuID_File,
menuID_Help]
# Make a dictionary of the menu item IDs.
self.menuID = {}
for eachmenu in menuID_ALL:
for eachitem in eachmenu:
self.menuID[eachitem] = wx.NewId()
# Create the menus.
MM_File = wx.Menu()
FILE = {}
MM_File.AppendSeparator()
FILE['exit'] = MM_File.Append(self.menuID['exit'],
'Exit',
'Exit application.')
self.Bind(wx.EVT_MENU, self.onExit, FILE['exit'])
MainMenu.Append(MM_File, 'File')
MM_Help = wx.Menu()
HELP = {}
MM_Help.AppendSeparator()
HELP['about'] = MM_Help.Append(self.menuID['about'],
'About',
'About the application.')
self.Bind(wx.EVT_MENU, self.onAbout, HELP['about'])
MainMenu.Append(MM_Help, 'Help')
# Install the Main Menu.
self.SetMenuBar(MainMenu)
我嘗試使用列表對字典的東西做,所以我不需要一個特定的索引號在引用一個ID時,只需寫入一個關鍵字並獲得該ID。我寫了一次,它應用於函數的其餘部分。
請注意,我必須創建一個全新的變量並重復自己,比如MM_File,MM_Edit,MM_Help,並且每次我都輸入類似的信息來追加和綁定。請記住,某些菜單可能需要分隔符,或菜單中有菜單,或者我可能想要在這些菜單項旁邊使用精靈,所以我正在嘗試計算如何組織我的數組來執行此操作。
將此組織成一個簡潔的系統的適當方法是什麼,所以它不會膨脹這個類?
我修改了你爲輔助函數所做的代碼,把它放在從清單讀取的for循環中。 –