美文网首页
PyQt笔记——代码编辑器Scintilla的使用方法

PyQt笔记——代码编辑器Scintilla的使用方法

作者: Hemmelfort | 来源:发表于2019-05-29 19:00 被阅读0次

    Scintilla 是一个开源的源代码编辑器,带有语法高亮、区块折叠、代码提示、显示行号断点等众多功能,所以在文本编辑器领域相当流行。

    PyQt 版的 Scintilla 叫 QsciScintilla,被包含在Qsci模块中。
    安装方法:pip install QScintilla

    🥗 创建自定义控件类 CodeWidget

    继承自 Qsci.QsciScintilla,使用方法类似于 Qt 自带的 QTextEdit。

    import Qsci
    
    class CodeWidget(Qsci.QsciScintilla):
    
        def __init__(self):
            super().__init__()
    
            self.setEolMode(self.SC_EOL_LF)    # 以\n换行
            self.setWrapMode(self.WrapWord)    # 自动换行。self.WrapWord是父类QsciScintilla的
            self.setAutoCompletionSource(self.AcsAll)  # 自动补全。对于所有Ascii字符
            self.setAutoCompletionCaseSensitivity(False)  # 自动补全大小写敏感
            self.setAutoCompletionThreshold(1)  # 输入多少个字符才弹出补全提示
            self.setFolding(True)  # 代码可折叠
            self.setFont(QtGui.QFont('Consolas', 12))  # 设置默认字体
            # self.setMarginType(0, self.NumberMargin)    # 0~4。第0个左边栏显示行号
            # self.setMarginLineNumbers(0, True)  # 我也不知道
            # self.setMarginsBackgroundColor(QtGui.QColor(120, 220, 180))  # 边栏背景颜色
            # self.setMarginWidth(0, 30)  # 边栏宽度
            self.setAutoIndent(True)  # 换行后自动缩进
            self.setUtf8(True)  # 支持中文字符
    

    🍧 设置语法着色方案

    以 Html 为例:

        def setSyntax(self):
            lexer = Qsci.QsciLexerHTML()
            # lexer.setDefaultFont(这里填 QFont 类型的字体)
            self.setLexer(lexer)    # 关键是这句
    

    🍦 还可以添加按键响应:

        def keyPressEvent(self, e):
            ''' 和 QWidget 一样 '''
            if e.key() == QtCore.Qt.Key_Escape:
                print ('hehe')
    
            super().keyPressEvent(e)
    
        def wheelEvent(self, e):
            ''' Ctrl + 滚轮 控制字体缩放 '''
            if QtWidgets.QApplication.keyboardModifiers() == QtCore.Qt.ControlModifier:
                da = e.angleDelta()
                if da.y() > 0:
                    self.zoomIn(1)    # QsciScintilla 自带缩放的功能。参数是增加的字体点数
                elif da.y() < 0:
                    self.zoomOut(1)
            else:
                super().wheelEvent(e)   # 留点汤给父类,不然滚轮无法翻页
    

    🍡 使用方法:

    code = CodeWidget()
    code.setText('<p>hahaha<a href="www.jianshu.com">hehe</a></p>')
    

    Scintilla 的功能还有很多,这里是官网上的文档 :
    🌱 https://www.scintilla.org/ScintillaDoc.html
    Scintilla 内置了不少常用的代码高亮方案,如要自定义一套语法方案请看这里:https://www.jianshu.com/p/1677ad6e503d


    QsciScintilla 全部的语法解析器(Qt5.9):

    • QsciLexerAVS
    • QsciLexerBash
    • QsciLexerBatch
    • QsciLexerCMake
    • QsciLexerCPP
    • QsciLexerCSS
    • QsciLexerCSharp
    • QsciLexerCoffeeScript
    • QsciLexerD
    • QsciLexerDiff
    • QsciLexerFortran
    • QsciLexerFortran77
    • QsciLexerHTML
    • QsciLexerIDL
    • QsciLexerJSON
    • QsciLexerJava
    • QsciLexerJavaScript
    • QsciLexerLua
    • QsciLexerMakefile
    • QsciLexerMarkdown
    • QsciLexerMatlab
    • QsciLexerOctave
    • QsciLexerPO
    • QsciLexerPOV
    • QsciLexerPascal
    • QsciLexerPerl
    • QsciLexerPostScript
    • QsciLexerProperties
    • QsciLexerPython
    • QsciLexerRuby
    • QsciLexerSQL
    • QsciLexerSpice
    • QsciLexerTCL
    • QsciLexerTeX
    • QsciLexerVHDL
    • QsciLexerVerilog
    • QsciLexerXML
    • QsciLexerYAML

    相关文章

      网友评论

          本文标题:PyQt笔记——代码编辑器Scintilla的使用方法

          本文链接:https://www.haomeiwen.com/subject/ykwlrqtx.html