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

📄 stctexteditor.py

📁 wxPython的基本示例程序
💻 PY
📖 第 1 页 / 共 5 页
字号:
        if lineNum == -1:            lineNum = self.GetCtrl().GetCurrentLine()        if self.GetCtrl().MarkerGet(lineNum) & mask:            self.GetCtrl().MarkerDelete(lineNum, marker_index)            self._markerCount -= 1        else:            self.GetCtrl().MarkerAdd(lineNum, marker_index)            self._markerCount += 1    def MarkerAdd(self, lineNum = -1, marker_index=MARKER_NUM, mask=MARKER_MASK):        if lineNum == -1:            lineNum = self.GetCtrl().GetCurrentLine()        self.GetCtrl().MarkerAdd(lineNum, marker_index)        self._markerCount += 1    def MarkerDelete(self, lineNum = -1, marker_index=MARKER_NUM, mask=MARKER_MASK):        if lineNum == -1:            lineNum = self.GetCtrl().GetCurrentLine()        if self.GetCtrl().MarkerGet(lineNum) & mask:            self.GetCtrl().MarkerDelete(lineNum, marker_index)            self._markerCount -= 1    def MarkerDeleteAll(self, marker_num=MARKER_NUM):        self.GetCtrl().MarkerDeleteAll(marker_num)        if marker_num == self.MARKER_NUM:            self._markerCount = 0    def MarkerNext(self, lineNum = -1):        if lineNum == -1:            lineNum = self.GetCtrl().GetCurrentLine() + 1  # start search below current line        foundLine = self.GetCtrl().MarkerNext(lineNum, self.MARKER_MASK)        if foundLine == -1:            # wrap to top of file            foundLine = self.GetCtrl().MarkerNext(0, self.MARKER_MASK)            if foundLine == -1:                wx.GetApp().GetTopWindow().PushStatusText(_("No markers"))                return                self.GotoLine(foundLine + 1)    def MarkerPrevious(self, lineNum = -1):        if lineNum == -1:            lineNum = self.GetCtrl().GetCurrentLine() - 1  # start search above current line            if lineNum == -1:                lineNum = self.GetCtrl().GetLineCount()        foundLine = self.GetCtrl().MarkerPrevious(lineNum, self.MARKER_MASK)        if foundLine == -1:            # wrap to bottom of file            foundLine = self.GetCtrl().MarkerPrevious(self.GetCtrl().GetLineCount(), self.MARKER_MASK)            if foundLine == -1:                wx.GetApp().GetTopWindow().PushStatusText(_("No markers"))                return        self.GotoLine(foundLine + 1)    def MarkerExists(self, lineNum = -1, mask=MARKER_MASK):        if lineNum == -1:            lineNum = self.GetCtrl().GetCurrentLine()        if self.GetCtrl().MarkerGet(lineNum) & mask:            return True        else:            return False    def GetMarkerLines(self, mask=MARKER_MASK):        retval = []        for lineNum in range(self.GetCtrl().GetLineCount()):            if self.GetCtrl().MarkerGet(lineNum) & mask:                retval.append(lineNum)        return retval            def GetMarkerCount(self):        return self._markerCountclass TextService(wx.lib.pydocview.DocService):    def __init__(self):        wx.lib.pydocview.DocService.__init__(self)    def InstallControls(self, frame, menuBar = None, toolBar = None, statusBar = None, document = None):        if document and document.GetDocumentTemplate().GetDocumentType() != TextDocument:            return        if not document and wx.GetApp().GetDocumentManager().GetFlags() & wx.lib.docview.DOC_SDI:            return        statusBar = TextStatusBar(frame, TEXT_STATUS_BAR_ID)        frame.SetStatusBar(statusBar)        wx.EVT_UPDATE_UI(frame, TEXT_STATUS_BAR_ID, frame.ProcessUpdateUIEvent)        viewMenu = menuBar.GetMenu(menuBar.FindMenu(_("&View")))        viewMenu.AppendSeparator()        textMenu = wx.Menu()        textMenu.AppendCheckItem(VIEW_WHITESPACE_ID, _("&Whitespace"), _("Shows or hides whitespace"))        wx.EVT_MENU(frame, VIEW_WHITESPACE_ID, frame.ProcessEvent)        wx.EVT_UPDATE_UI(frame, VIEW_WHITESPACE_ID, frame.ProcessUpdateUIEvent)        textMenu.AppendCheckItem(VIEW_EOL_ID, _("&End of Line Markers"), _("Shows or hides indicators at the end of each line"))        wx.EVT_MENU(frame, VIEW_EOL_ID, frame.ProcessEvent)        wx.EVT_UPDATE_UI(frame, VIEW_EOL_ID, frame.ProcessUpdateUIEvent)        textMenu.AppendCheckItem(VIEW_INDENTATION_GUIDES_ID, _("&Indentation Guides"), _("Shows or hides indentations"))        wx.EVT_MENU(frame, VIEW_INDENTATION_GUIDES_ID, frame.ProcessEvent)        wx.EVT_UPDATE_UI(frame, VIEW_INDENTATION_GUIDES_ID, frame.ProcessUpdateUIEvent)        textMenu.AppendCheckItem(VIEW_RIGHT_EDGE_ID, _("&Right Edge"), _("Shows or hides the right edge marker"))        wx.EVT_MENU(frame, VIEW_RIGHT_EDGE_ID, frame.ProcessEvent)        wx.EVT_UPDATE_UI(frame, VIEW_RIGHT_EDGE_ID, frame.ProcessUpdateUIEvent)        textMenu.AppendCheckItem(VIEW_LINE_NUMBERS_ID, _("&Line Numbers"), _("Shows or hides the line numbers"))        wx.EVT_MENU(frame, VIEW_LINE_NUMBERS_ID, frame.ProcessEvent)        wx.EVT_UPDATE_UI(frame, VIEW_LINE_NUMBERS_ID, frame.ProcessUpdateUIEvent)                viewMenu.AppendMenu(TEXT_ID, _("&Text"), textMenu)        wx.EVT_UPDATE_UI(frame, TEXT_ID, frame.ProcessUpdateUIEvent)                isWindows = (wx.Platform == '__WXMSW__')        zoomMenu = wx.Menu()        zoomMenu.Append(ZOOM_NORMAL_ID, _("Normal Size"), _("Sets the document to its normal size"))        wx.EVT_MENU(frame, ZOOM_NORMAL_ID, frame.ProcessEvent)        wx.EVT_UPDATE_UI(frame, ZOOM_NORMAL_ID, frame.ProcessUpdateUIEvent)        if isWindows:            zoomMenu.Append(ZOOM_IN_ID, _("Zoom In\tCtrl+Page Up"), _("Zooms the document to a larger size"))        else:            zoomMenu.Append(ZOOM_IN_ID, _("Zoom In"), _("Zooms the document to a larger size"))        wx.EVT_MENU(frame, ZOOM_IN_ID, frame.ProcessEvent)        wx.EVT_UPDATE_UI(frame, ZOOM_IN_ID, frame.ProcessUpdateUIEvent)        if isWindows:            zoomMenu.Append(ZOOM_OUT_ID, _("Zoom Out\tCtrl+Page Down"), _("Zooms the document to a smaller size"))        else:            zoomMenu.Append(ZOOM_OUT_ID, _("Zoom Out"), _("Zooms the document to a smaller size"))        wx.EVT_MENU(frame, ZOOM_OUT_ID, frame.ProcessEvent)        wx.EVT_UPDATE_UI(frame, ZOOM_OUT_ID, frame.ProcessUpdateUIEvent)                viewMenu.AppendMenu(ZOOM_ID, _("&Zoom"), zoomMenu)        wx.EVT_UPDATE_UI(frame, ZOOM_ID, frame.ProcessUpdateUIEvent)        formatMenuIndex = menuBar.FindMenu(_("&Format"))        if formatMenuIndex > -1:            formatMenu = menuBar.GetMenu(formatMenuIndex)        else:            formatMenu = wx.Menu()        if not menuBar.FindItemById(CHOOSE_FONT_ID):            formatMenu.Append(CHOOSE_FONT_ID, _("&Font..."), _("Sets the font to use"))            wx.EVT_MENU(frame, CHOOSE_FONT_ID, frame.ProcessEvent)            wx.EVT_UPDATE_UI(frame, CHOOSE_FONT_ID, frame.ProcessUpdateUIEvent)        if not menuBar.FindItemById(WORD_WRAP_ID):            formatMenu.AppendCheckItem(WORD_WRAP_ID, _("Word Wrap"), _("Wraps text horizontally when checked"))            wx.EVT_MENU(frame, WORD_WRAP_ID, frame.ProcessEvent)            wx.EVT_UPDATE_UI(frame, WORD_WRAP_ID, frame.ProcessUpdateUIEvent)        if formatMenuIndex == -1:            viewMenuIndex = menuBar.FindMenu(_("&View"))            menuBar.Insert(viewMenuIndex + 1, formatMenu, _("&Format"))        # wxBug: wxToolBar::GetToolPos doesn't exist, need it to find cut tool and then insert find in front of it.        toolBar.AddSeparator()        toolBar.AddTool(ZOOM_IN_ID, getZoomInBitmap(), shortHelpString = _("Zoom In"), longHelpString = _("Zooms the document to a larger size"))        toolBar.AddTool(ZOOM_OUT_ID, getZoomOutBitmap(), shortHelpString = _("Zoom Out"), longHelpString = _("Zooms the document to a smaller size"))        toolBar.Realize()    def ProcessUpdateUIEvent(self, event):        id = event.GetId()        if (id == TEXT_ID        or id == VIEW_WHITESPACE_ID        or id == VIEW_EOL_ID        or id == VIEW_INDENTATION_GUIDES_ID        or id == VIEW_RIGHT_EDGE_ID        or id == VIEW_LINE_NUMBERS_ID        or id == ZOOM_ID        or id == ZOOM_NORMAL_ID        or id == ZOOM_IN_ID        or id == ZOOM_OUT_ID        or id == CHOOSE_FONT_ID        or id == WORD_WRAP_ID):            event.Enable(False)            return True        else:            return Falseclass TextStatusBar(wx.StatusBar):    # wxBug: Would be nice to show num key status in statusbar, but can't figure out how to detect if it is enabled or disabled    def __init__(self, parent, id, style = wx.ST_SIZEGRIP, name = "statusBar"):        wx.StatusBar.__init__(self, parent, id, style, name)        self.SetFieldsCount(4)        self.SetStatusWidths([-1, 50, 50, 55])    def SetInsertMode(self, insert = True):        if insert:            newText = _("Ins")        else:            newText = _("")        if self.GetStatusText(1) != newText:     # wxBug: Need to check if the text has changed, otherwise it flickers under win32            self.SetStatusText(newText, 1)    def SetLineNumber(self, lineNumber):        newText = _("Ln %i") % lineNumber        if self.GetStatusText(2) != newText:            self.SetStatusText(newText, 2)    def SetColumnNumber(self, colNumber):        newText = _("Col %i") % colNumber        if self.GetStatusText(3) != newText:            self.SetStatusText(newText, 3)class TextOptionsPanel(wx.Panel):    def __init__(self, parent, id, configPrefix = "Text", label = "Text", hasWordWrap = True, hasTabs = False, addPage=True, hasFolding=False):        wx.Panel.__init__(self, parent, id)        self._configPrefix = configPrefix        self._hasWordWrap = hasWordWrap        self._hasTabs = hasTabs        self._hasFolding = hasFolding        SPACE = 10        HALF_SPACE   = 5        config = wx.ConfigBase_Get()        self._textFont = wx.Font(10, wx.MODERN, wx.NORMAL, wx.NORMAL)        fontData = config.Read(self._configPrefix + "EditorFont", "")        if fontData:            nativeFont = wx.NativeFontInfo()            nativeFont.FromString(fontData)            self._textFont.SetNativeFontInfo(nativeFont)        self._originalTextFont = self._textFont        self._textColor = wx.BLACK        colorData = config.Read(self._configPrefix + "EditorColor", "")        if colorData:            red = int("0x" + colorData[0:2], 16)            green = int("0x" + colorData[2:4], 16)            blue = int("0x" + colorData[4:6], 16)            self._textColor = wx.Color(red, green, blue)        self._originalTextColor = self._textColor        fontLabel = wx.StaticText(self, -1, _("Font:"))        self._sampleTextCtrl = wx.TextCtrl(self, -1, "", size = (125, 21))        self._sampleTextCtrl.SetEditable(False)        chooseFontButton = wx.Button(self, -1, _("Choose Font..."))        wx.EVT_BUTTON(self, chooseFontButton.GetId(), self.OnChooseFont)        if self._hasWordWrap:            self._wordWrapCheckBox = wx.CheckBox(self, -1, _("Wrap words inside text area"))            self._wordWrapCheckBox.SetValue(wx.ConfigBase_Get().ReadInt(self._configPrefix + "EditorWordWrap", False))        self._viewWhitespaceCheckBox = wx.CheckBox(self, -1, _("Show whitespace"))        self._viewWhitespaceCheckBox.SetValue(config.ReadInt(self._configPrefix + "EditorViewWhitespace", False))        self._viewEOLCheckBox = wx.CheckBox(self, -1, _("Show end of line markers"))        self._viewEOLCheckBox.SetValue(config.ReadInt(self._configPrefix + "EditorViewEOL", False))        self._viewIndentationGuideCheckBox = wx.CheckBox(self, -1, _("Show indentation guides"))        self._viewIndentationGuideCheckBox.SetValue(config.ReadInt(self._configPrefix + "EditorViewIndentationGuides", False))        self._viewRightEdgeCheckBox = wx.CheckBox(self, -1, _("Show right edge"))        self._viewRightEdgeCheckBox.SetValue(config.ReadInt(self._configPrefix + "EditorViewRightEdge", False))        self._viewLineNumbersCheckBox = wx.CheckBox(self, -1, _("Show line numbers"))        self._viewLineNumbersCheckBox.SetValue(config.ReadInt(self._configPrefix + "EditorViewLineNumbers", True))        if self._hasFolding:            self._viewFoldingCheckBox = wx.CheckBox(self, -1, _("Show folding"))            self._viewFoldingCheckBox.SetValue(config.ReadInt(self._configPrefix + "EditorViewFolding", True))        if self._hasTabs:            self._hasTabsCheckBox = wx.CheckBox(self, -1, _("Use spaces instead of tabs"))            self._hasTabsCheckBox.SetValue(not wx.ConfigBase_Get().ReadInt(self._configPrefix + "EditorUseTabs", False))            indentWidthLabel = wx.StaticText(self, -1, _("Indent Width:"))            self._indentWidthChoice = wx.Choice(self, -1, choices = ["2", "4", "6", "8", "10"])            self._indentWidthChoice.SetStringSelection(str(config.ReadInt(self._configPrefix + "EditorIndentWidth", 4)))        textPanelBorderSizer = wx.BoxSizer(wx.VERTICAL)        textPanelSizer = wx.BoxSizer(wx.VERTICAL)        textFontSizer = wx.BoxSizer(wx.HORIZONTAL)        textFontSizer.Add(fontLabel, 0, wx.ALIGN_LEFT | wx.RIGHT | wx.TOP, HALF_SPACE)        textFontSizer.Add(self._sampleTextCtrl, 1, wx.ALIGN_LEFT | wx.EXPAND | wx.RIGHT, HALF_SPACE)        textFontSizer.Add(chooseFontButton, 0, wx.ALIGN_RIGHT | wx.LEFT, HALF_SPACE)        textPanelSizer.Add(textFontSizer, 0, wx.ALL|wx.EXPAND, HALF_SPACE)        if self._hasWordWrap:            textPanelSizer.Add(self._wordWrapCheckBox, 0, wx.ALL, HALF_SPACE)        textPanelSizer.Add(self._viewWhitespaceCheckBox, 0, wx.ALL, HALF_SPACE)        textPanelSizer.Add(self._viewEOLCheckBox, 0, wx.ALL, HALF_SPACE)        textPanelSizer.Add(self._viewIndentationGuideCheckBox, 0, wx.ALL, HALF_SPACE)        textPanelSizer.Add(self._viewRightEdgeCheckBox, 0, wx.ALL, HALF_SPACE)        textPanelSizer.Add(self._viewLineNumbersCheckBox, 0, wx.ALL, HALF_SPACE)        if self._hasFolding:            textPanelSizer.Add(self._viewFoldingCheckBox, 0, wx.ALL, HALF_SPACE)        if self._hasTabs:            textPanelSizer.Add(self._hasTabsCheckBox, 0, wx.ALL, HALF_SPACE)            textIndentWidthSizer = wx.BoxSizer(wx.HORIZONTAL)            textIndentWidthSizer.Add(indentWidthLabel, 0, wx.ALIGN_LEFT | wx.RIGHT | wx.TOP, HALF_SPACE)            textIndentWidthSizer.Add(self._indentWidthChoice, 0, wx.ALIGN_LEFT | wx.EXPAND, HALF_SPACE)            textPanelSizer.Add(textIndentWidthSizer, 0, wx.ALL, HALF_SPACE)        textPanelBorderSizer.Add(textPanelSizer, 0, wx.ALL|wx.EXPAND, SPACE)##        styleButton = wx.Button(self, -1, _("Choose Style..."))##        wx.EVT_BUTTON(self, styleButton.GetId(), self.OnChooseStyle)##        textPanelBorderSizer.Add(styleButton, 0, wx.ALL, SPACE)        self.SetSizer(textPanelBorderSizer)        self.UpdateSampleFont()        if addPage:            parent.AddPage(self, _(label))    def UpdateSampleFont(self):        nativeFont = wx.NativeFontInfo()        nativeFont.FromString(self._textFont.GetNativeFontInfoDesc())        font = wx.NullFont        font.SetNativeFontInfo(nativeFont)        font.SetPointSize(self._sampleTextCtrl.GetFont().GetPointSize())  # Use the standard point size        self._sampleTextCtrl.SetFont(font)        self._sampleTextCtrl.SetForegroundColour(self._textColor)        self._sampleTextCtrl.SetValue(str(self._textFont.GetPointSize()) + _(" pt. ") + self._textFont.GetFaceName())        self._sampleTextCtrl.Refresh()        self.Layout()

⌨️ 快捷键说明

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