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

📄 splitter_window.py

📁 用python写的ide开发环境,巨强大,不过需要wxpython的支持
💻 PY
📖 第 1 页 / 共 2 页
字号:
                sp = max_pos/2            if self.orientation == wx.SPLIT_VERTICAL:                self.widget.SplitVertically(self.window_1.widget,                                            self.window_2.widget, sp)            else:                self.widget.SplitHorizontally(self.window_1.widget,                                              self.window_2.widget, sp)            for w in self.window_1, self.window_2:                if hasattr(w, 'sel_marker'): w.sel_marker.update()    def get_style(self):        retval = [0] * len(self.style_pos)        if not self.style:            # style is wxSP_NOBORDER            #retval[5] = 1            retval[4] = 1        try:            for i in range(len(self.style_pos)):                if self.style & self.style_pos[i]: retval[i] = 1        except AttributeError: pass        if retval[1] and retval[2]:            # wx.SP_3D == wx.SP_3DSASH | wx.SP_3DBORDER            retval[0] = 1            retval[1] = retval[2] = 0        elif retval[1] or retval[2]:            retval[0] = 0        return retval    def set_style(self, value):        value = self.properties['style'].prepare_value(value)        self.style = 0        for v in range(len(value)):            if value[v]:                self.style |= self.style_pos[v]        if self.widget: self.widget.SetWindowStyleFlag(self.style)    def get_sash_pos(self):        return self.sash_pos    def set_sash_pos(self, value):        try: value = int(value)        except ValueError: return        self.sash_pos = value        if self.widget:            self.widget.SetSashPosition(value)    def on_size(self, event):        if not self.widget: return        try:            if self.orientation == wx.SPLIT_VERTICAL:                max_pos = self.widget.GetClientSize()[0]            else: max_pos = self.widget.GetClientSize()[1]            self.properties['sash_pos'].set_range(-max_pos, max_pos)            if not self.properties['sash_pos'].is_active():                self.widget.SetSashPosition(max_pos/2)                self.sash_pos = self.widget.GetSashPosition()                self.properties['sash_pos'].set_value(self.sash_pos)        except (AttributeError, KeyError): pass        ManagedBase.on_size(self, event)    def on_sash_pos_changed(self, event):        self.sash_pos = self.widget.GetSashPosition()        self.properties['sash_pos'].set_value(self.sash_pos)        event.Skip()    def get_orientation(self):        od = { wx.SPLIT_HORIZONTAL: 'wxSPLIT_HORIZONTAL',               wx.SPLIT_VERTICAL: 'wxSPLIT_VERTICAL' }        return od.get(self.orientation, 'wxSPLIT_VERTICAL')    def set_orientation(self, value):        od = { 'wxSPLIT_HORIZONTAL': wx.SPLIT_HORIZONTAL,               'wxSPLIT_VERTICAL': wx.SPLIT_VERTICAL }        self.orientation = od.get(value, wx.SPLIT_VERTICAL)    def get_win_1(self):        if not isinstance(self.window_1, SizerSlot):            return self.window_1.name        return ''    def get_win_2(self):        if not isinstance(self.window_2, SizerSlot):            return self.window_2.name        return ''    def get_no_custom_class(self):        return self.no_custom_class    def set_no_custom_class(self, value):        self.no_custom_class = bool(int(value))# end of class EditSplitterWindowdef builder(parent, sizer, pos, number=[1]):    """\    factory function for EditSplitterWindow objects.    """    class Dialog(wx.Dialog):        def __init__(self):            wx.Dialog.__init__(self, None, -1, 'Select orientation')            self.orientations = [ wx.SPLIT_VERTICAL, wx.SPLIT_HORIZONTAL ]            self.orientation = wx.SPLIT_VERTICAL            prop = RadioProperty(self, 'orientation', self,                                 ['wxSPLIT_VERTICAL', 'wxSPLIT_HORIZONTAL'], label=_("orientation"))            szr = wx.BoxSizer(wx.VERTICAL)            szr.Add(prop.panel, 0, wx.ALL|wx.EXPAND, 10)            btn = wx.Button(self, wx.ID_OK, _('OK'))            btn.SetDefault()            szr.Add(btn, 0, wx.BOTTOM|wx.ALIGN_CENTER, 10)            self.SetAutoLayout(True)            self.SetSizer(szr)            szr.Fit(self)            self.CenterOnScreen()                    def __getitem__(self, value):            def set_orientation(o): self.orientation = self.orientations[o]            return (lambda: self.orientation, set_orientation)    # end of inner class    dialog = Dialog()    dialog.ShowModal()    name = 'window_%d' % number[0]    while common.app_tree.has_name(name):        number[0] += 1        name = 'window_%d' % number[0]    window = EditSplitterWindow(name, parent, wx.NewId(), None, None, None,                                dialog.orientation,                                sizer, pos, common.property_panel, show=False)    try:        from panel import EditPanel        have_panels = True    except ImportError:        have_panels = False    if have_panels:        pane1 = EditPanel(name + '_pane_1', window, wx.NewId(),                            window.virtual_sizer, 1, common.property_panel)        pane2 = EditPanel(name + '_pane_2', window, wx.NewId(),                            window.virtual_sizer, 2, common.property_panel)        window.window_1 = pane1        window.window_2 = pane2        node = Tree.Node(window)    window.node = node    window.virtual_sizer.node = node    window.set_option(1)    window.set_flag("wxEXPAND")    window.show_widget(True)    common.app_tree.insert(node, sizer.node, pos-1)    if have_panels:        node2 = Tree.Node(window.window_1)        window.window_1.node = node2        common.app_tree.add(node2, window.node)        node3 = Tree.Node(window.window_2)        window.window_2.node = node3        common.app_tree.add(node3, window.node)    sizer.set_item(window.pos, 1, wx.EXPAND)def xml_builder(attrs, parent, sizer, sizeritem, pos=None):    """\    factory to build EditSplitterWindow objects from an xml file    """    from xml_parse import XmlParsingError    try: name = attrs['name']    except KeyError: raise XmlParsingError, _("'name' attribute missing")    if not sizer or not sizeritem:        raise XmlParsingError, _("sizer or sizeritem object cannot be None")    window = EditSplitterWindow(name, parent, wx.NewId(), None, None, None,                                wx.SPLIT_VERTICAL,                                sizer, pos, common.property_panel, True)    sizer.set_item(window.pos, option=sizeritem.option, flag=sizeritem.flag,                   border=sizeritem.border)    node = Tree.Node(window)    window.node = node    window.virtual_sizer.node = node    if pos is None: common.app_tree.add(node, sizer.node)    else: common.app_tree.insert(node, sizer.node, pos-1)    return windowdef initialize():    """\    initialization function for the module: returns a wxBitmapButton to be    added to the main palette.    """    common.widgets['EditSplitterWindow'] = builder    common.widgets_from_xml['EditSplitterWindow'] = xml_builder        return common.make_object_button('EditSplitterWindow',                                     'icons/splitter_window.xpm')

⌨️ 快捷键说明

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