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

📄 panel.py

📁 用python写的ide开发环境,巨强大,不过需要wxpython的支持
💻 PY
📖 第 1 页 / 共 2 页
字号:
# Name:         panel.py# Purpose:      XRC editor, Panel class and related# Author:       Roman Rolinsky <rolinsky@mema.ucl.ac.be># Created:      02.12.2002# RCS-ID:       $Id: panel.py 47172 2007-07-05 21:51:46Z ROL $from xxx import *                       # xxx imports globals and paramsfrom undo import *from wx.html import HtmlWindow# Properties panel containing notebookclass Panel(wx.Notebook):    def __init__(self, parent, id = -1):        if wx.Platform != '__WXMAC__':   # some problems with this style on macs            wx.Notebook.__init__(self, parent, id, style=wx.NB_BOTTOM)        else:            wx.Notebook.__init__(self, parent, id)        global panel        g.panel = panel = self        self.modified = False        # Set common sizes        import params        cTmp = wx.Button(self, -1, '')        params.buttonSize = (self.DLG_SZE(buttonSizeD)[0], cTmp.GetSize()[1])                cTmp.Destroy()        cTmp = wx.TextCtrl(self, -1, '')        params.textSize = cTmp.GetSize()        cTmp.Destroy()        cTmp = wx.CheckBox(self, -1, 'growablerows ') # this is the longest        ParamPage.labelSize = cTmp.GetSize()        cTmp.Destroy()        del cTmp        # List of child windows        self.pages = []        # Create scrolled windows for pages        self.page1 = wx.ScrolledWindow(self, -1)        sizer = wx.BoxSizer()        sizer.Add(wx.BoxSizer())         # dummy sizer        self.page1.SetAutoLayout(True)        self.page1.SetSizer(sizer)        self.AddPage(self.page1, 'Properties')        # Second page        self.page2 = wx.ScrolledWindow(self, -1)        self.page2.Hide()        sizer = wx.BoxSizer()        sizer.Add(wx.BoxSizer())         # dummy sizer        self.page2.SetAutoLayout(True)        self.page2.SetSizer(sizer)        # Cache for already used panels        self.pageCache = {}             # cached property panels        self.stylePageCache = {}        # cached style panels    # Delete child windows and recreate page sizer    def ResetPage(self, page):        topSizer = page.GetSizer()        sizer = topSizer.GetChildren()[0].GetSizer()        for w in page.GetChildren():            sizer.Detach(w)            if isinstance(w, ParamPage):                if w.IsShown():                    w.Hide()            else:                w.Destroy()        topSizer.Remove(sizer)        # Create new windows        sizer = wx.BoxSizer(wx.VERTICAL)        # Special case - resize html window        if g.conf.panic:            topSizer.Add(sizer, 1, wx.EXPAND)        else:            topSizer.Add(sizer, 1, wx.ALL, 5)        return sizer    def SetData(self, xxx):        self.pages = []        # First page        # Remove current objects and sizer        sizer = self.ResetPage(self.page1)        if not xxx or (not xxx.allParams and not xxx.hasName and not xxx.hasChild):            if g.tree.selection:                sizer.Add(wx.StaticText(self.page1, -1, 'This item has no properties.'))            else:                       # nothing selected                # If first time, show some help                if g.conf.panic:                    html = HtmlWindow(self.page1, -1, wx.DefaultPosition,                                        wx.DefaultSize, wx.SUNKEN_BORDER)                    html.SetPage(g.helpText)                    sizer.Add(html, 1, wx.EXPAND)                    g.conf.panic = False                else:                    sizer.Add(wx.StaticText(self.page1, -1, 'Select a tree item.'))        else:            g.currentXXX = xxx.treeObject()            # Normal or SizerItem page            isGBSizerItem = isinstance(xxx.parent, xxxGridBagSizer)            cacheID = (xxx.panelName(), isGBSizerItem)            try:                page = self.pageCache[cacheID]                page.box.SetLabel(xxx.panelName())                page.Show()            except KeyError:                page = PropPage(self.page1, xxx.panelName(), xxx)                self.pageCache[cacheID] = page            page.SetValues(xxx)            self.pages.append(page)            sizer.Add(page, 1, wx.EXPAND)            if xxx.hasChild:                # Special label for child objects - they may have different GUI                cacheID = (xxx.child.panelName(), xxx.__class__)                try:                    page = self.pageCache[cacheID]                    page.box.SetLabel(xxx.child.panelName())                    page.Show()                except KeyError:                    page = PropPage(self.page1, xxx.child.panelName(), xxx.child)                    self.pageCache[cacheID] = page                page.SetValues(xxx.child)                self.pages.append(page)                sizer.Add(page, 0, wx.EXPAND | wx.TOP, 5)        self.page1.Layout()        size = self.page1.GetSizer().GetMinSize()        self.page1.SetScrollbars(1, 1, size.width, size.height, 0, 0, True)        # Second page        # Create if does not exist        if xxx and xxx.treeObject().hasStyle:            xxx = xxx.treeObject()            # Simplest case: set data if class is the same            sizer = self.ResetPage(self.page2)            try:                page = self.stylePageCache[xxx.__class__]                page.Show()            except KeyError:                page = StylePage(self.page2, xxx.className + ' style', xxx)                self.stylePageCache[xxx.__class__] = page            page.SetValues(xxx)            self.pages.append(page)            sizer.Add(page, 0, wx.EXPAND)            # Add page if not exists            if not self.GetPageCount() == 2:                self.AddPage(self.page2, 'Style')            self.page2.Layout()            if 'wxGTK' in wx.PlatformInfo:                self.page2.Show(True)            size = self.page2.GetSizer().GetMinSize()            self.page2.SetScrollbars(1, 1, size.width, size.height, 0, 0, True)        else:            # Remove page if exists            if self.GetPageCount() == 2:                self.SetSelection(0)                self.page1.Refresh()                self.RemovePage(1)        self.modified = False            def Clear(self):        self.SetData(None)        self.modified = False            # If some parameter has changed    def IsModified(self):        return self.modified        def SetModified(self, value):        # Register undo object when modifying first time        if not self.modified and value:           g.undoMan.RegisterUndo(UndoEdit())           g.frame.SetModified()        self.modified = value            def Apply(self):        for p in self.pages: p.Apply()################################################################################# General class for notebook pagesclass ParamPage(wx.Panel):    labelSize = None    def __init__(self, parent, xxx):        wx.Panel.__init__(self, parent, -1)        self.xxx = xxx        # Register event handlers        for id in paramIDs.values():            wx.EVT_CHECKBOX(self, id, self.OnCheckParams)        self.checks = {}        self.controls = {}              # save python objects        self.controlName = None            def OnCheckParams(self, evt):        xxx = self.xxx        param = evt.GetEventObject().GetName()        w = self.controls[param]        w.Enable(True)        objElem = xxx.node        if evt.IsChecked():            # Ad  new text node in order of allParams            w.SetValue('')              # set empty (default) value            w.SetModified()             # mark as changed            elem = g.tree.dom.createElement(param)            # Some classes are special            if param == 'font':                xxx.params[param] = xxxParamFont(xxx.node, elem)            elif param in xxxObject.bitmapTags:                xxx.params[param] = xxxParamBitmap(elem)            else:                xxx.params[param] = xxxParam(elem)

⌨️ 快捷键说明

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