我试图找到一种方式来凝聚和自动化主菜单的结构(标题栏的下方,与文件,编辑,帮助等)在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循环中。 –