⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 menubar.py

📁 用python写的ide开发环境,巨强大,不过需要wxpython的支持
💻 PY
📖 第 1 页 / 共 3 页
字号:
# menubar.py: wxMenuBar objects# $Id: menubar.py,v 1.28 2007/08/07 12:18:34 agriggio Exp $## Copyright (c) 2002-2007 Alberto Griggio <agriggio@users.sourceforge.net># License: MIT (see license.txt)# THIS PROGRAM COMES WITH NO WARRANTYimport wximport common, math, miscfrom tree import Treefrom MenuTree import *from widget_properties import *from edit_windows import EditBase, TopLevelBase, PreviewMixinclass MenuItemDialog(wx.Dialog):    def __init__(self, parent, owner, items=None):        wx.Dialog.__init__(self, parent, -1, _("Menu editor"),                          style=wx.DEFAULT_DIALOG_STYLE|wx.RESIZE_BORDER)        ADD_ID, REMOVE_ID, NAME_ID, LABEL_ID, ID_ID, CHECK_RADIO_ID, LIST_ID, \                ADD_SEP_ID, MOVE_LEFT_ID, MOVE_RIGHT_ID, MOVE_UP_ID, \                MOVE_DOWN_ID, HELP_STR_ID = [wx.NewId() for i in range(13)]        self._staticbox = wx.StaticBox(self, -1, _("Menu item:"))        self.owner = owner        self.menu_items = wx.ListCtrl(self, LIST_ID, style=wx.LC_REPORT | \                                     wx.LC_SINGLE_SEL|wx.SUNKEN_BORDER)        # ALB 2004-09-26: workaround to make the scroll wheel work...        wx.EVT_MOUSEWHEEL(self.menu_items, lambda e: e.Skip())                self.menu_items.InsertColumn(0, _("Label"))        self.menu_items.InsertColumn(1, _("Id"))        self.menu_items.InsertColumn(2, _("Name"))        self.menu_items.InsertColumn(3, _("Help String"))        self.menu_items.InsertColumn(4, _("Type"))        # ALB 2004-12-05        self.menu_items.InsertColumn(5, _("Event Handler"))        self.menu_items.SetColumnWidth(0, 250)        self.menu_items.SetColumnWidth(2, 250)        self.menu_items.SetColumnWidth(3, 250)        self.menu_items.SetColumnWidth(5, 250)        # menu item fields        self.id = wx.TextCtrl(self, ID_ID)        self.label = wx.TextCtrl(self, LABEL_ID)        self.name = wx.TextCtrl(self, NAME_ID)        self.help_str = wx.TextCtrl(self, HELP_STR_ID)        # ALB 2004-12-05        self.event_handler = wx.TextCtrl(self, -1)        import re        self.handler_re = re.compile(r'^\s*\w*\s*$')        #self.checkable = wx.CheckBox(self, CHECK_ID, "") #Checkable")        self.check_radio = wx.RadioBox(            self, CHECK_RADIO_ID, _("Type"),            choices=['Normal', 'Checkable', 'Radio'], majorDimension=3)        self.add = wx.Button(self, ADD_ID, _("Add"))        self.remove = wx.Button(self, REMOVE_ID, _("Remove"))        self.add_sep = wx.Button(self, ADD_SEP_ID, _("Add separator"))        # menu items navigation        self.move_up = wx.Button(self, MOVE_UP_ID, _("Up"))        self.move_down = wx.Button(self, MOVE_DOWN_ID, _("Down"))        self.move_left = wx.Button(self, MOVE_LEFT_ID, " < ")        self.move_right = wx.Button(self, MOVE_RIGHT_ID, " > ")        self.ok = wx.Button(self, wx.ID_OK, _("OK"))        self.apply = wx.Button(self, wx.ID_APPLY, _("Apply"))        self.cancel = wx.Button(self, wx.ID_CANCEL, _("Cancel"))        self.do_layout()        self.selected_index = -1 # index of the selected element in the                                  # wx.ListCtrl menu_items        # event handlers        wx.EVT_BUTTON(self, ADD_ID, self.add_menu_item)        wx.EVT_BUTTON(self, REMOVE_ID, self.remove_menu_item)        wx.EVT_BUTTON(self, ADD_SEP_ID, self.add_separator)        wx.EVT_BUTTON(self, MOVE_LEFT_ID, self.move_item_left)        wx.EVT_BUTTON(self, MOVE_RIGHT_ID, self.move_item_right)        wx.EVT_BUTTON(self, MOVE_UP_ID, self.move_item_up)        wx.EVT_BUTTON(self, MOVE_DOWN_ID, self.move_item_down)        wx.EVT_BUTTON(self, wx.ID_APPLY, self.on_apply)        wx.EVT_KILL_FOCUS(self.name, self.update_menu_item)        wx.EVT_KILL_FOCUS(self.label, self.update_menu_item)        wx.EVT_KILL_FOCUS(self.id, self.update_menu_item)        wx.EVT_KILL_FOCUS(self.help_str, self.update_menu_item)        # ALB 2004-12-05        wx.EVT_KILL_FOCUS(self.event_handler, self.update_menu_item)        #wx.EVT_CHECKBOX(self, CHECK_ID, self.update_menu_item)        wx.EVT_RADIOBOX(self, CHECK_RADIO_ID, self.update_menu_item)        wx.EVT_LIST_ITEM_SELECTED(self, LIST_ID, self.show_menu_item)        if items:            self.add_items(items)    def do_layout(self):        self.label.Enable(False)        self.id.Enable(False)        self.name.Enable(False)        self.help_str.Enable(False)        self.event_handler.Enable(False)        self.check_radio.Enable(False)                sizer = wx.BoxSizer(wx.VERTICAL)        sizer2 = wx.StaticBoxSizer(self._staticbox, wx.VERTICAL)        self.label.SetSize((150, -1))        self.id.SetSize((150, -1))        self.name.SetSize((150, -1))        self.help_str.SetSize((150, -1))        self.event_handler.SetSize((150, -1))        szr = wx.FlexGridSizer(0, 2)        if misc.check_wx_version(2, 5, 2):            flag = wx.FIXED_MINSIZE        else:            flag = 0        label_flag = wx.ALIGN_CENTER_VERTICAL        szr.Add(wx.StaticText(self, -1, _("Id   ")), flag=label_flag)        szr.Add(self.id, flag=flag)        szr.Add(wx.StaticText(self, -1, _("Label  ")), flag=label_flag)        szr.Add(self.label, flag=flag)        szr.Add(wx.StaticText(self, -1, _("Name  ")), flag=label_flag)        szr.Add(self.name, flag=flag)        szr.Add(wx.StaticText(self, -1, _("Help String  ")), flag=label_flag)        szr.Add(self.help_str, flag=flag)        szr.Add(wx.StaticText(self, -1, _("Event Handler  ")), flag=label_flag)        szr.Add(self.event_handler, flag=flag)        sizer2.Add(szr, 1, wx.ALL|wx.EXPAND, 5)        sizer2.Add(self.check_radio, 0, wx.LEFT|wx.RIGHT|wx.BOTTOM, 4)        szr = wx.GridSizer(0, 2, 3, 3)        szr.Add(self.add, 0, wx.EXPAND); szr.Add(self.remove, 0, wx.EXPAND)        sizer2.Add(szr, 0, wx.EXPAND)        sizer2.Add(self.add_sep, 0, wx.TOP|wx.EXPAND, 3)        sizer3 = wx.BoxSizer(wx.VERTICAL)        sizer3.Add(self.menu_items, 1, wx.ALL|wx.EXPAND, 5)        sizer4 = wx.BoxSizer(wx.HORIZONTAL)        sizer4.Add(self.move_up, 0, wx.LEFT|wx.RIGHT, 3)        sizer4.Add(self.move_down, 0, wx.LEFT|wx.RIGHT, 5)        sizer4.Add(self.move_left, 0, wx.LEFT|wx.RIGHT, 5)        sizer4.Add(self.move_right, 0, wx.LEFT|wx.RIGHT, 5)        sizer3.Add(sizer4, 0, wx.ALIGN_CENTER|wx.ALL, 5)        szr = wx.BoxSizer(wx.HORIZONTAL)        szr.Add(sizer3, 1, wx.ALL|wx.EXPAND, 5)         szr.Add(sizer2, 0, wx.TOP|wx.BOTTOM|wx.RIGHT, 5)        sizer.Add(szr, 1, wx.EXPAND)        sizer2 = wx.BoxSizer(wx.HORIZONTAL)        sizer2.Add(self.ok, 0, wx.ALL, 5)        sizer2.Add(self.apply, 0, wx.ALL, 5)        sizer2.Add(self.cancel, 0, wx.ALL, 5)        sizer.Add(sizer2, 0, wx.ALL|wx.ALIGN_CENTER, 3)        self.SetAutoLayout(1)        self.SetSizer(sizer)        sizer.Fit(self)        self.SetSize((-1, 350))        self.CenterOnScreen()    def _enable_fields(self, enable=True):        for s in (self.label, self.id, self.name, self.help_str,                  self.check_radio, self.event_handler):            s.Enable(enable)    def add_menu_item(self, event):        """\        Event handler called when the Add button is clicked        """        index = self.selected_index = self.selected_index+1        if not self.menu_items.GetItemCount():            self._enable_fields()##             for s in (self.label, self.id, self.name, self.help_str,##                       self.check_radio, self.event_handler):##                 s.Enable(True)        if index < 0: index = self.menu_items.GetItemCount()        elif index > 0: indent = "    " * self.item_level(index-1)        else: indent = ""        name, label, id, check_radio = "", "item", "", "0"        self.menu_items.InsertStringItem(index, indent + label)        self.menu_items.SetStringItem(index, 1, id)        self.menu_items.SetStringItem(index, 2, name)        self.menu_items.SetStringItem(index, 4, check_radio)        # fix bug 698074        self.menu_items.SetItemState(index, wx.LIST_STATE_SELECTED,                                     wx.LIST_STATE_SELECTED)        self.name.SetValue(name)        self.label.SetValue(label)        self.id.SetValue(id)        self.check_radio.SetSelection(int(check_radio))        self.event_handler.SetValue("")    def add_separator(self, event):        """\        Event handler called when the Add Separator button is clicked        """        index = self.selected_index+1        if not self.menu_items.GetItemCount():            self._enable_fields()##             for s in (self.label, self.id, self.name, self.help_str,##                       self.check_radio, self.event_handler):##                 s.Enable(True)        if index < 0: index = self.menu_items.GetItemCount()         elif index > 0: label = "    " * self.item_level(index-1) + '---'        else: label = '---'        self.menu_items.InsertStringItem(index, label)        self.menu_items.SetStringItem(index, 1, '---')        self.menu_items.SetStringItem(index, 2, '---')        # fix bug 698074        self.menu_items.SetItemState(index, wx.LIST_STATE_SELECTED,                                     wx.LIST_STATE_SELECTED)    def show_menu_item(self, event):        """\        Event handler called when a menu item in the list is selected        """                self.selected_index = index = event.GetIndex()        if not misc.streq(self.menu_items.GetItem(index, 2).m_text, '---'):            # skip if the selected item is a separator            for (s, i) in ((self.label, 0), (self.id, 1), (self.name, 2),                           (self.help_str, 3), (self.event_handler, 5)):                s.SetValue(self.menu_items.GetItem(index, i).m_text)            self.label.SetValue(self.label.GetValue().lstrip())            try:                self.check_radio.SetSelection(                    int(self.menu_items.GetItem(index, 4).m_text))            except:                self.check_radio.SetSelection(0)        event.Skip()    def update_menu_item(self, event):        """\        Event handler called when some of the properties of the current menu        item changes        """                set_item = self.menu_items.SetStringItem        index = self.selected_index        val = self.event_handler.GetValue()        if not self.handler_re.match(val):            event.GetEventObject().SetFocus()            return        if index < 0:            return event.Skip()        set_item(index, 0, "    " * self.item_level(index) + \                 self.label.GetValue().lstrip())        set_item(index, 1, self.id.GetValue())        set_item(index, 2, self.name.GetValue())        set_item(index, 3, self.help_str.GetValue())        set_item(index, 4, str(self.check_radio.GetSelection()))        set_item(index, 5, self.event_handler.GetValue())        event.Skip()    def item_level(self, index, label=None):        """\        returns the indentation level of the menu item at the given index        """        label = self.menu_items.GetItem(index, 0).m_text        return (len(label) - len(label.lstrip())) / 4        def remove_menu_item(self, event):        """\        Event handler called when the Remove button is clicked        """                if self.selected_index >= 0:            index = self.selected_index+1            if index < self.menu_items.GetItemCount() and \               (self.item_level(self.selected_index) < self.item_level(index)):                self._move_item_left(index)                self.selected_index = index-1            for s in (self.name, self.id, self.label, self.help_str,                      self.event_handler):                s.SetValue("")            self.check_radio.SetSelection(0)            self.menu_items.DeleteItem(self.selected_index)            if not self.menu_items.GetItemCount():                self._enable_fields(False)##                 for s in (self.name, self.id, self.label, \##                           self.help_str, self.check_radio, self.event_handler):##                     s.Enable(False)    def add_items(self, menus):        """\        adds the content of 'menus' to self.menu_items. menus is a sequence of

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -