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('

hahahahehe

')

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

Logo

一站式 AI 云服务平台

更多推荐