【发布时间】:2015-10-10 20:58:28
【问题描述】:
我正在尝试找到一种方法来压缩和自动构建主菜单(在标题栏下方,带有 file、edit、help 等)在 wxPython 中。
写出每个菜单项都是直接的,但我注意到我在附加、排序 ID 等之间重复了很多次。其次是其他独特的坑,比如我想向特定菜单添加图标,或者如果我有子菜单,它们可能有子菜单等。如果没有一种一致的方式来逐项列出所有内容,只需将信息添加到列表或字典或两者的组合中,我的 wx.Frame 对象将变得非常密集。
除了 3 维数组之外,我看不到一种干净而有组织的方式。即便如此,我也不知道如何统一组织该 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)
我尝试使用 list-to-dictionary 来制作它,因此在引用 ID 时不需要特定的索引号,只需输入关键字即可获取 ID。我只写了一次,它就应用于函数的其余部分。
请注意我必须如何创建一个全新的变量并重复自身,例如 MM_File、MM_Edit、MM_Help,并且每次我都输入类似的信息来追加和绑定。请记住,某些菜单可能需要分隔符,或者菜单中有菜单,或者我可能想在任何这些菜单项旁边使用精灵,所以我试图弄清楚如何组织我的数组来做到这一点.
将它组织成一个简洁系统的适当方法是什么,这样它就不会膨胀这个类?
【问题讨论】:
标签: python user-interface menu wxpython