Я пытаюсь найти способ конденсировать и автоматизировать строительство главного меню (под строкой заголовка, с файла, редактировать, помощью и т.д.) в WxPython.Автоматизация настройки главного меню wxPython?
Выполнение каждого элемента меню является прямым, но я замечаю, что повторяю много, между добавлением, сортировкой идентификаторов и т. Д. Далее следуют другие уникальные ямы, например, если я хочу добавить значок в определенное меню или если у меня есть подменю, и у них могут быть подменю и т. д. Без единого последовательного способа детализации всего, просто добавив информацию в список или словарь или комбо из двух, мой объект 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)
Я попытался с помощью списка-к-словаря вещи, чтобы сделать это так, мне не нужно определенный номер индекса при обращении к идентификатору, просто напишите по ключевому слову и получите идентификатор. Я пишу его один раз, и он применяется к остальной части функции.
Обратите внимание, что мне нужно сделать всю новую переменную и повторить ее, как MM_File, MM_Edit, MM_Help, и каждый раз, когда я делаю, я добавляю подобную информацию для добавления и привязки. И имейте в виду, что некоторые из меню могут нуждаться в разделителях или иметь меню в меню, или я могу использовать спрайт рядом с любым из этих пунктов меню, поэтому я пытаюсь понять, как организовать мои массивы, чтобы сделать это ,
Каков подходящий способ организовать это в краткой системе, чтобы он не раздувал этот класс?
Я изменил код, который вы сделали для вспомогательной функции, поставив его в цикл for, который читается из манифеста. –