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

📄 edit_sizers.py

📁 用python写的ide开发环境,巨强大,不过需要wxpython的支持
💻 PY
📖 第 1 页 / 共 5 页
字号:
def change_sizer(old, new, which_page=0, _hidden=[None]):    """\    changes 'old' sizer to 'new'    Params:      - old: SizerBase instance to replace      - new: string selection that identifies the new instance      - which_page: index of the notebook page of the property window to                    display: this is used only by set_growable_(rows|cols)    """    constructors = {        'wxBoxSizer (wxVERTICAL)':        lambda : EditBoxSizer(old.name, old.window, wx.VERTICAL, 0,                              old.toplevel),        'wxBoxSizer (wxHORIZONTAL)':        lambda : EditBoxSizer(old.name, old.window, wx.HORIZONTAL, 0,                              old.toplevel),        'wxStaticBoxSizer (wxVERTICAL)':        lambda : EditStaticBoxSizer(old.name, old.window, wx.VERTICAL,                                    getattr(old, 'label', old.name),                                    0, old.toplevel),        'wxStaticBoxSizer (wxHORIZONTAL)':        lambda : EditStaticBoxSizer(old.name, old.window, wx.HORIZONTAL,                                    getattr(old, 'label', old.name),                                    0, old.toplevel),        'wxGridSizer':        lambda : EditGridSizer(old.name, old.window, rows=0, cols=0,                               toplevel=old.toplevel),        'wxFlexGridSizer':        lambda : EditFlexGridSizer(old.name, old.window, rows=0, cols=0,                                   toplevel=old.toplevel)    }    szr = constructors[new]()    szr.children.extend(old.children[1:])    szr.node = old.node    if isinstance(szr, GridSizerBase):        szr.set_rows(getattr(old, 'rows', 1))        szr.set_cols(getattr(old, 'cols', len(szr.children)-1))        szr.set_hgap(getattr(old, 'hgap', 0))        szr.set_vgap(getattr(old, 'vgap', 0))        if isinstance(szr, EditFlexGridSizer):            try:                grow_r = old.grow_rows                grow_c = old.grow_cols                if grow_r:                    szr.grow_rows = grow_r                    szr.properties['growable_rows'].toggle_active(True)                    szr.properties['growable_rows'].set_value(                        szr.get_growable_rows())                if grow_c:                    szr.grow_cols = grow_c                    szr.properties['growable_cols'].toggle_active(True)                    szr.properties['growable_cols'].set_value(                        szr.get_growable_cols())            except (AttributeError, KeyError):                pass    szr.show_widget(True, dont_set=True)    if _hidden[0] is None:        _hidden[0] = wx.Frame(None, -1, _("HIDDEN FRAME FOR CHANGE SIZER"))        for c in szr.children[1:]:        widget = c.item        widget.sizer = szr        if not isinstance(widget, SizerSlot):            # ALB 2007-09-04. This is necessary as a workaround to a            # wx.StaticBoxSizer issue: it seems that the wx.StaticBox needs to            # come before any other widget managed by the wx.StaticBoxSizer in            # the GetChildren() list. Explicitly reparenting the widgets seems            # to solve the problem            p = widget.widget.GetParent()            widget.widget.Reparent(_hidden[0])            widget.widget.Reparent(p)            szr.widget.Insert(widget.pos, widget.widget,                              int(widget.get_option()), widget.get_int_flag(),                              int(widget.get_border()))    if not szr.toplevel:        szr.sizer = old.sizer        szr.option = old.option        szr.flag = old.flag        szr.border = old.border        szr.pos = old.pos        szr.sizer.children[szr.pos].item = szr        if szr.sizer.widget:            elem = szr.sizer.widget.GetChildren()[szr.pos]            elem.SetSizer(szr.widget)    import common    common.app_tree.change_node(szr.node, szr)    old.toplevel = False    szr.show_properties()    szr.notebook.SetSelection(which_page)    for c in old.widget.GetChildren():        if c and c.IsSizer(): c.SetSizer(None)    old.widget.Clear()    old.children = old.children[:1]    old.delete()    if szr.toplevel:        szr.window.set_sizer(szr)    szr.layout(True)#------------------------------------------------------------------------------class InsertDialog(wx.Dialog):    def __init__(self, max_val):        wx.Dialog.__init__(self, None, -1, _("Select a position"))        self.pos = 0        pos_prop = SpinProperty(self, 'position', self, r=(0, max_val), label=_("position"))        szr = wx.BoxSizer(wx.VERTICAL)        szr.Add(pos_prop.panel, 0, wx.ALL|wx.EXPAND, 5)        szr2 = wx.BoxSizer(wx.HORIZONTAL)        szr2.Add(wx.Button(self, wx.ID_OK, _("OK")), 0, wx.ALL, 5)        szr2.Add(wx.Button(self, wx.ID_CANCEL, _("Cancel")), 0, wx.ALL, 5)        szr.Add(szr2, 0, wx.ALIGN_CENTER)        self.SetAutoLayout(True)        self.SetSizer(szr)        szr.Fit(self)        self.CenterOnScreen()    def __getitem__(self, name):        def set_pos(v): self.pos = int(v)        return (lambda : self.pos, set_pos)# end of class InsertDialogclass Sizer:    """\    Base class for every Sizer handled by wxGlade    """    def __init__(self, window):        self.window = window # window this sizer is responsible                             # for the layout of            def set_item(self, pos, option=None, flag=None, border=None, size=None,                 force_layout=True):        """\        Updates the layout of the item at the given pos.        """        raise NotImplementedError            def add_item(self, item, pos=None, option=0, flag=0, border=0, size=None,                 force_layout=True):        """\        Adds an item to self.        """        raise NotImplementedError            def remove_item(self, elem, force_layout=True):        """\        Removes elem from self.        """        pass        def free_slot(self, pos, force_layout=True):        """\        Replaces the element at pos with an empty slot        """        raise NotImplementedError            def _fix_notebook(self, pos, notebook_sizer, force_layout=True):        """\        Internal method used to replace a notebook widget with its notebook        sizer.        """        pass        def is_virtual(self):        """\        Return true if sizer is virtual (f.e. SplitterWindowSizer)        """        return False    def get_itempos(self, attrs):        """\        For virtual sizers only, returns the position of the item        in the parent: this is used when loading a wxg file, to build the        tree of widgets correctly        """        raise NotImplementedError# end of class Sizerclass SizerBase(Sizer):    """\    Base class for every non-virtual Sizer handled by wxGlade    """    def __init__(self, name, klass, window, toplevel=True, show=True,                 menu=None):        Sizer.__init__(self, window)        self.id = wx.NewId()        self.name = name        self.klass = klass        self.base = klass        self.pos = 0 # for sub-sizers, the position inside the parent        self.properties = {}        self.property_window = window.property_window                self.widget = None # this is the actual wxSizer instance                # toplevel: if True, self is not inside another sizer, but it is the        # responsible of the layout of self.window        self.toplevel = toplevel        if not self.toplevel:            self.option = 1            self.flag = wx.EXPAND            self.border = 0            self.sizer = None                    self.menu = menu        if self.menu is None:            self.menu = [(_('Add slot'), self.add_slot),                         (_('Insert slot...'), self.insert_slot)]        #if not self.toplevel:        self.menu.extend([(_('Copy\tCtrl+C'), self.clipboard_copy,                           wx.ART_COPY),                          (_('Cut\tCtrl+X'), self.clipboard_cut,                           wx.ART_CUT),                           ])        self._btn = None # SizerHandleButton        self.notebook = None        self._property_setup()        self.children = [] # list of widgets added to the sizer    def create_widget(self):        """\        Creates the wxSizer self.widget        """        raise NotImplementedError    def show_widget(self, yes, dont_set=False):        if not yes or self.widget:            return # nothing to do if the sizer has already been created        self._btn = SizerHandleButton(self.window, self.id, self, self.menu)        # ScreenToClient used by WidgetTree for the popup menu        wx.EVT_BUTTON(self._btn, self.id, self.show_properties)        self.create_widget()        self.widget.Refresh = self.refresh        self.widget.GetBestSize = self.widget.GetMinSize        self.widget.ScreenToClient = self._btn.ScreenToClient        if self.toplevel and not dont_set: self.window.set_sizer(self)        # ALB 2004-08-11        if not config.preferences.show_sizer_handle:            self.widget.Show(self._btn, False)        if misc.focused_widget is self:            self.update_view(True)    def _property_setup(self):        """\        Setup of the Properties of self.        """        self.flags_pos = [ wx.ALL, wx.LEFT, wx.RIGHT, wx.TOP, wx.BOTTOM,                           wx.EXPAND, wx.ALIGN_RIGHT, wx.ALIGN_BOTTOM,                           wx.ALIGN_CENTER_HORIZONTAL, wx.ALIGN_CENTER_VERTICAL,                           wx.SHAPED, wx.ADJUST_MINSIZE ]        self.access_functions = {            'name' : (lambda : self.name, self.set_name),            'class' : (lambda : self.klass, self.change) #lambda v: None)            }        if not self.toplevel:            self.access_functions['option'] = (self.get_option,self.set_option)            self.access_functions['flag'] = (self.get_flag, self.set_flag)            self.access_functions['border'] = (self.get_border,self.set_border)            self.access_functions['pos'] = (self.get_pos, self.set_pos)        self.name_prop = TextProperty(self, 'name', None, label=_('name'))        #self.klass_prop = TextProperty(self, 'class', None, readonly=True)        dialog = SizerClassDialog(self, None)        self.klass_prop = DialogProperty(self, 'class', None, dialog, label=_('class'))        if not self.toplevel:            prop = self.sizer_properties = {}            #prop['option'] = SpinProperty(self, 'option', None, 0, (0, 1000))            from layout_option_property import LayoutOptionProperty, \                 LayoutPosProperty            prop['option'] = LayoutOptionProperty(self, self.sizer)            flag_labels = ['#section#' + _('Border'), 'wxALL',                           'wxLEFT', 'wxRIGHT', 'wxTOP', 'wxBOTTOM',                           '#section#' + _('Alignment'), 'wxEXPAND', 'wxALIGN_RIGHT',                           'wxALIGN_BOTTOM', 'wxALIGN_CENTER_HORIZONTAL',                           'wxALIGN_CENTER_VERTICAL', 'wxSHAPED',                           'wxADJUST_MINSIZE' ]            prop['flag'] = CheckListProperty(self, 'flag', None, flag_labels)            prop['border'] = SpinProperty(self, 'border', None, 0, (0, 1000), label=_('border'))            prop['pos'] = LayoutPosProperty(self, self.sizer)    def set_containing_sizer(self, sizer):        self.sizer = sizer        self.sizer_properties['option'].set_sizer(sizer)        self.sizer_properties['pos'].set_sizer(sizer)    def get_pos(self):        return self.pos - 1        def set_pos(self, value):        misc.wxCallAfter(self.sizer.change_item_pos,                          self, min(value + 1, len(self.sizer.children) - 1))    def update_pos(self, value):        #print 'update pos', self.name, value        self.sizer_properties['pos'].set_value(value-1)        self.pos = value    def change(self, *args):        # if wxPython < 2.3.3, wxCallAfter is defined in misc.py        misc.wxCallAfter(change_sizer, self, self.klass_prop.get_value())    def create_properties(self):        """\        Displays the Properties of self        """        self.notebook = wx.Notebook(common.property_panel, -1)        if not misc.check_wx_version(2, 5, 2):            nb_sizer = wx.NotebookSizer(self.notebook)            self.notebook.sizer = nb_sizer        else:            self.notebook.sizer = None        self.notebook.SetAutoLayout(True)        panel = wx.ScrolledWindow(self.notebook, -1, style=wx.TAB_TRAVERSAL)        sizer_tmp = wx.BoxSizer(wx.VERTICAL)        self.name_prop.display(panel)        self.klass_prop.display(panel)        self.klass_prop.text.SetEditable(False)        sizer_tmp.Add(self.name_prop.panel, 0, wx.EXPAND)        sizer_tmp.Add(self.klass_prop.panel, 0, wx.EXPAND)        if not self.toplevel:            prop = self.sizer_properties            prop['pos'].display(panel)            prop['option'].display(panel)            prop['border'].display(panel)            prop['flag'].display(panel)            sizer_tmp.Add(prop['pos'].panel, 0, wx.EXPAND)            sizer_tmp.Add(prop['option'].panel, 0, wx.EXPAND)

⌨️ 快捷键说明

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