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

📄 panel.py

📁 用python写的ide开发环境,巨强大,不过需要wxpython的支持
💻 PY
📖 第 1 页 / 共 2 页
字号:
# panel.py: wxPanel objects# $Id: panel.py,v 1.38 2007/08/07 12:15:21 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, miscfrom tree import Treefrom widget_properties import *from edit_windows import ManagedBase, TopLevelBaseclass PanelBase(object):    _custom_base_classes = True    def __init__(self, style=wx.TAB_TRAVERSAL):        """\        Class to handle wxPanel objects        """        super(PanelBase, self).__init__()        self.top_sizer = None # sizer to handle the layout of children        # ------ ALB 2005-11-19: option to disable custom class code generation        self.no_custom_class = False        self.access_functions['no_custom_class'] = (self.get_no_custom_class,                                                    self.set_no_custom_class)        self.properties['no_custom_class'] = CheckBoxProperty(            self, 'no_custom_class',            label=_("Don't generate code for this custom class"))        # ------        self.style = style        self.access_functions['style'] = (self.get_style, self.set_style)        self.style_pos  = [wx.SIMPLE_BORDER, wx.DOUBLE_BORDER, wx.SUNKEN_BORDER,                           wx.RAISED_BORDER, wx.STATIC_BORDER,                           wx.NO_BORDER, wx.NO_3D,                           wx.TAB_TRAVERSAL, wx.WANTS_CHARS,                           wx.NO_FULL_REPAINT_ON_RESIZE,                           wx.FULL_REPAINT_ON_RESIZE,                           wx.CLIP_CHILDREN]        style_labels = ('#section#' + _('Style'), 'wxSIMPLE_BORDER', 'wxDOUBLE_BORDER',                        'wxSUNKEN_BORDER', 'wxRAISED_BORDER',                        'wxSTATIC_BORDER',                        'wxNO_BORDER', 'wxNO_3D', 'wxTAB_TRAVERSAL',                        'wxWANTS_CHARS', 'wxNO_FULL_REPAINT_ON_RESIZE',                        'wxFULL_REPAINT_ON_RESIZE',                        'wxCLIP_CHILDREN')        self.properties['style'] = CheckListProperty(self, 'style', None,                                                     style_labels)        self.access_functions['scrollable'] = (self.get_scrollable,                                               self.set_scrollable)        self.scrollable = False        self.properties['scrollable'] = CheckBoxProperty(            self, 'scrollable', None, label=_("scrollable"))        self.scroll_rate = (10, 10)        self.access_functions['scroll_rate'] = (self.get_scroll_rate,                                                self.set_scroll_rate)        self.properties['scroll_rate'] = TextProperty(self, 'scroll_rate',                                                      None, can_disable=True, label=_("scroll_rate"))    def finish_widget_creation(self):        super(PanelBase, self).finish_widget_creation(            sel_marker_parent=self.widget)        if not self.scrollable:            self.widget.SetScrollRate(0, 0)        else:            self.widget.SetScrollRate(*self.scroll_rate)        # this must be done here since ManagedBase.finish_widget_creation        # normally sets EVT_LEFT_DOWN to update_wiew        if not self.widget.Disconnect(-1, -1, wx.wxEVT_LEFT_DOWN):            print _("EditPanel: Unable to disconnect the event hanlder")        wx.EVT_LEFT_DOWN(self.widget, self.drop_sizer)        #wx.EVT_SCROLLWIN(self.widget, self._update_markers)    def _update_markers(self, event):        def get_pos():            x, y = self.widget.GetPosition()            xx, yy = self.widget.GetViewStart()            return x+xx, y+yy        old = self.widget.GetPosition        self.widget.GetPosition = get_pos        #print self.widget, self.sel_marker.owner        self.sel_marker.update()        self.widget.GetPosition = old        event.Skip()    def create_properties(self):        super(PanelBase, self).create_properties()        panel = wx.ScrolledWindow(self.notebook, -1, style=wx.TAB_TRAVERSAL)        panel.SetScrollRate(5, 5)        szr = wx.BoxSizer(wx.VERTICAL)        self.properties['no_custom_class'].display(panel)        szr.Add(self.properties['no_custom_class'].panel, 0, wx.EXPAND)        label = self.properties['no_custom_class'].cb        label.SetToolTip(            wx.ToolTip(_('If this is a custom class, setting this property '                       'prevents wxGlade\nfrom generating the class definition'                       ' code')))        self.properties['style'].display(panel)        szr.Add(self.properties['style'].panel, 0, wx.EXPAND)        self.properties['scrollable'].display(panel)        szr.Add(self.properties['scrollable'].panel, 0, wx.EXPAND)        self.properties['scroll_rate'].display(panel)        szr.Add(self.properties['scroll_rate'].panel, 0, wx.EXPAND)        panel.SetAutoLayout(True)        panel.SetSizer(szr)        szr.Fit(panel)        self.notebook.AddPage(panel, 'Widget')            def on_enter(self, event):        if not self.top_sizer and common.adding_sizer:            self.widget.SetCursor(wx.CROSS_CURSOR)        else:            self.widget.SetCursor(wx.STANDARD_CURSOR)    def set_sizer(self, sizer):        self.top_sizer = sizer        if self.top_sizer and self.top_sizer.widget and self.widget:            self.widget.SetAutoLayout(True)            self.widget.SetSizer(self.top_sizer.widget)            self.widget.Layout()        elif self.top_sizer is None and self.widget:            self.widget.SetSizer(None)    def drop_sizer(self, event):        if self.top_sizer or not common.adding_sizer:            self.on_set_focus(event) # default behaviour: call show_properties            return        self.widget.SetCursor(wx.NullCursor)        common.widgets[common.widget_to_add](self, None, None)        common.adding_widget = common.adding_sizer = False        common.widget_to_add = None        common.app_tree.app.saved = False    def get_widget_best_size(self):        if self.top_sizer and self.widget.GetSizer():            self.top_sizer.fit_parent()            return self.widget.GetSize()        return wx.ScrolledWindow.GetBestSize(self.widget)    def get_style(self):        retval = [0] * len(self.style_pos)        try:            for i in range(len(self.style_pos)):                if self.style & self.style_pos[i]:                    retval[i] = 1        except AttributeError:            pass        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]    def get_scrollable(self):        return self.scrollable    def set_scrollable(self, value):        self.scrollable = bool(int(value))        if self.scrollable:            if self.klass == 'wxPanel':                self.klass = 'wxScrolledWindow'                self.klass_prop.set_value(self.klass)        else:            if self.klass == 'wxScrolledWindow':                self.klass = 'wxPanel'                self.klass_prop.set_value(self.klass)        if not self.widget: return        if self.scrollable:            self.properties['scroll_rate'].toggle_active(True)            self.widget.SetScrollRate(*self.scroll_rate)        else:            self.properties['scroll_rate'].toggle_active(False)            self.widget.SetScrollRate(0, 0)    def get_scroll_rate(self):        return '%d, %d' % self.scroll_rate    def set_scroll_rate(self, value):        invalid = False        try:            srx, sry = [int(t) for t in value.split(',', 1)]            if srx < 0 or sry < 0:                invalid = True        except:            invalid = True        if invalid:            self.properties['scroll_rate'].set_value(self.get_scroll_rate())            return        self.scroll_rate = srx, sry        if self.widget:            self.widget.SetScrollRate(srx, sry)    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 PanelBase    class EditPanel(PanelBase, ManagedBase):    def __init__(self, name, parent, id, sizer, pos, property_window,                 show=True, style=wx.TAB_TRAVERSAL):        """\        Class to handle wxPanel objects        """        ManagedBase.__init__(self, name, 'wxPanel', parent, id, sizer,                             pos, property_window, show=show)        PanelBase.__init__(self, style)    def create_widget(self):        #self.widget = wx.Panel(self.parent.widget, self.id, style=0)        self.widget = wx.ScrolledWindow(self.parent.widget, self.id, style=0)        wx.EVT_ENTER_WINDOW(self.widget, self.on_enter)        self.widget.GetBestSize = self.get_widget_best_size        if self.sizer.is_virtual():            def GetBestSize():                if self.widget and self.widget.GetSizer():                    return self.widget.GetSizer().GetMinSize()

⌨️ 快捷键说明

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