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

📄 codegen.py

📁 用python写的ide开发环境,巨强大,不过需要wxpython的支持
💻 PY
📖 第 1 页 / 共 2 页
字号:
# codegen.py: code generator functions for wxMenuBar objects# $Id: codegen.py,v 1.21 2007/03/27 07:01:57 agriggio Exp $## Copyright (c) 2002-2007 Alberto Griggio <agriggio@users.sourceforge.net># License: MIT (see license.txt)# THIS PROGRAM COMES WITH NO WARRANTYimport commonfrom MenuTree import *class PythonCodeGenerator:    def get_properties_code(self, obj):        return []            def get_init_code(self, obj):        prop = obj.properties        pygen = common.code_writers['python']        cn = pygen.cn        out = []        append = out.append        menus = obj.properties['menubar']        ids = []        def append_items(menu, items):            for item in items:                if item.name == '---': # item is a separator                    append('%s.AppendSeparator()\n' % menu)                    continue                name, val = pygen.generate_code_id(None, item.id)                if obj.preview or (not name and ( not val or val == '-1')):                    id = cn('wxNewId()')                else:                    if name: ids.append(name)                    id = val                if item.children:                    if item.name: name = item.name                    else: name = '%s_sub' % menu                    append(('%s = ' + cn('wxMenu') + '()\n') % name)##                     if not obj.preview and item.id: # generating id##                         tokens = item.id.split('=')##                         if len(tokens) > 1:##                             id = tokens[0]##                             ids.append(' = '.join(tokens) + '\n')##                         else:##                             id = item.id##                     else: id = 'wxNewId()'                    append_items(name, item.children)                    append('%s.AppendMenu(%s, %s, %s, %s)\n' %                           (menu, id, pygen.quote_str(item.label),                            name, pygen.quote_str(item.help_str)))                else:##                     if not obj.preview and item.id: # no ids for preview##                         tokens = item.id.split('=')##                         if len(tokens) > 1:##                             id = tokens[0]##                             ids.append(' = '.join(tokens) + '\n')##                         else:##                             id = item.id##                     else: id = 'wxNewId()'                    item_type = cn('wxITEM_NORMAL')                    if item.checkable == '1':                        item_type = cn('wxITEM_CHECK')                    elif item.radio == '1':                        item_type = cn('wxITEM_RADIO')                    if item.name:                        # ALB 2004-18-07                        name = 'self.%s' % item.name                        if item_type:                            append('%s = %s(%s, %s, %s, %s, %s)\n' %                                   (name, cn('wxMenuItem'), menu, id,                                    pygen.quote_str(item.label),                                    pygen.quote_str(item.help_str), item_type))                        else:                            append('%s = %s(%s, %s, %s, %s)\n' %                                   (name, cn('wxMenuItem'), menu,                                    id, pygen.quote_str(item.label),                                    pygen.quote_str(item.help_str)))                        append('%s.AppendItem(%s)\n' % (menu, name))                    else:                        if item_type:                            append('%s.Append(%s, %s, %s, %s)\n' %                                   (menu, id, pygen.quote_str(item.label),                                    pygen.quote_str(item.help_str), item_type))                        else:                            append('%s.Append(%s, %s, %s)\n' %                                   (menu, id, pygen.quote_str(item.label),                                    pygen.quote_str(item.help_str)))        #print 'menus = %s' % menus        if obj.is_toplevel: obj_name = 'self'        else: obj_name = 'self.' + obj.name        for m in menus:            menu = m.root            if menu.name: name = 'self.' + menu.name            else: name = 'wxglade_tmp_menu'            append(('%s = ' + cn('wxMenu') + '()\n') % name)            if menu.children:                append_items(name, menu.children)            append('%s.Append(%s, %s)\n' %                   (obj_name, name, pygen.quote_str(menu.label)))        return ids + out    def get_code(self, obj):        """\        function that generates Python code for the menubar of a wxFrame.        """        pygen = common.code_writers['python']        if obj.klass == obj.base: klass = pygen.cn(obj.klass)        else: klass = obj.klass        init = [ '\n', '# Menu Bar\n', 'self.%s = %s()\n' %                 (obj.name, klass) ]##                  'self.SetMenuBar(self.%s)\n' % obj.name ]        init.extend(self.get_init_code(obj))        init.append('self.SetMenuBar(self.%s)\n' % obj.name)        init.append('# Menu Bar end\n')        return init, [], []    # 2004-12-05    def get_events(self, obj):        pygen = common.code_writers['python']        cn = pygen.cn        out = []        #print 'get_events', obj.properties['menubar']        def do_get(item):            ret = []            if item.name and pygen.for_version > (2, 4):                val = '#self.%s' % item.name # see py_codegen.py, ~480            else:                name, val = pygen.generate_code_id(None, item.id)                if not val: val = '-1' # but this is wrong anyway...            if item.handler:                ret.append((val, 'EVT_MENU', item.handler))            if item.children:                for c in item.children:                    ret.extend(do_get(c))            return ret                for menu in obj.properties['menubar']:            out.extend(do_get(menu.root))        return out# end of class PythonCodeGeneratorclass MenuHandler:    """Handler for menus and menu items of a menubar"""    item_attrs = ('label', 'id', 'name', 'help_str', 'checkable', 'radio',                  'handler')    def __init__(self):        self.menu_depth = 0        self.menus = []        self.curr_menu = None        self.curr_item = None        self.attr_val = []    def start_elem(self, name, attrs):        if name == 'menu':            self.menu_depth += 1            label = attrs['label']            if self.menu_depth == 1:                t = MenuTree(attrs['name'], label)                self.curr_menu = t.root                self.menus.append(t)                return            id = attrs.get('itemid', '')            handler = attrs.get('handler', '')            node = MenuTree.Node(label=label, name=attrs['name'], id=id,                                 handler=handler)            node.parent = self.curr_menu            self.curr_menu.children.append(node)            self.curr_menu = node        elif name == 'item':            self.curr_item = MenuTree.Node()    def end_elem(self, name, code_obj):        if name == 'menus':            code_obj.properties['menubar'] = self.menus            return True        if name == 'item' and self.curr_menu:            self.curr_menu.children.append(self.curr_item)            self.curr_item.parent = self.curr_menu        elif name == 'menu':            self.menu_depth -= 1            self.curr_menu = self.curr_menu.parent        elif name in self.item_attrs:            setattr(self.curr_item, name, "".join(self.attr_val))            self.attr_val = []    def char_data(self, data):        self.attr_val.append(data)# end of class MenuHandlerdef xrc_code_generator(obj):    """\    function that generates XRC code for the menubar of a wxFrame.    """    from xml.sax.saxutils import escape, quoteattr    xrcgen = common.code_writers['XRC']        class MenuBarXrcObject(xrcgen.DefaultXrcObject):        def append_item(self, item, outfile, tabs):            write = outfile.write            if item.name == '---': # item is a separator                write('    '*tabs + '<object class="separator"/>\n')

⌨️ 快捷键说明

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