Qscintilla中文文档
根据这个英文文档改编的网站:https://qscintilla.com/
本文档假设您具备Python编程语言的基本知识。但即使你是这门语言的初学者,也不要因为这些例子而气馁无论如何应该是可以理解的。所有示例都将使用Python 3编程语言和PyQt5应用程序框架。在大多数情况下,将示例更改为Python 2或PyQt4非常简单情况下,微不足道。
有关Qt, PyQt, Scintilla和QScintilla的深入信息请访问官方网站文档的网站。
文章目录
1. 简介
本章假设您对QScintilla或PyQt一无所知,并将逐步指导您了解PyQt框架和QScintilla编辑组件的基础知识。
1.1. QScintilla是什么?
QScintilla是用c++编写的Qt应用程序框架的文本编辑组件编程语言。它是由Neil创建的Scintilla文本编辑组件的包装器霍奇森还使用c++编程语言。Qt应用程序框架是一个集合的对象,也称为小部件,帮助生成GUI(图形用户界面)和其他类型的应用程序更容易,而且是跨平台的。
PyQt是一组到Qt应用程序框架的Python绑定,它也包括绑定QScintilla组件。万岁,我们可以在Python中使用QScintilla了。介绍章节将只关注PyQt的QScintilla组件,其他PyQt组件将只关注在需要QScintilla组件时提及。因为PyQt是Qt框架的包装器,所以不可避免的是Qt的某些部分必须这样做为了理解文档的描述。有时我甚至会提到一些c++代码,但只有在绝对必要的时候。
QScintilla / Scintilla的引用一开始可能会让人感到困惑,但不要气馁,请记住QScintilla组件只是Scintilla文本编辑组件包装在一个Qt QWidget对象中,以便它可以在Qt框架和PyQt的QScintilla中使用组件只是用Python包装的QScintilla组件!
在稍后的文档中,我还将使用术语QScintilla、QScintilla文档、编辑器、对象或
小部件可以互换。所有术语都指QScintilla编辑组件。
1.2. 一些QScintilla特性
•内置语法高亮显示功能,支持30多种编程语言
•创建自定义语法高亮显示
•文本样式:下划线,高亮,…
•可点击文本(在QScintilla中称为hotspot)
•自动换行
•自动完成功能和调用提示
•错误指示,书签,使用文档的页边空白处
•代码折叠
•选择各种字体样式和颜色
•在同一个文档中混合字体样式
•自定义键盘命令
•文本块选择
•放大/缩小文本
•utf - 8的支持
•命令宏(用一个命令调用一系列命令)
•自定义插入符号(显示光标位置的闪烁标记)
•内置搜索和替换功能
•……
加上有了Python和整个PyQt框架,你就可以做很多事情。
1.3. QScintilla对象概述
所有QScintilla对象都是PyQt5下的PyQt框架的一部分。Qsci模块。以下列出的对象将在本文档中深入讨论(有些对象比其他对象更深入)。
1.3.1. PyQt5.Qsci.QsciScintillaBase
用于文本编辑的基本对象。这是一个更直接的低级包装器来访问所有的底层闪烁功能。控件中无法实现某些内容时使用PyQt5.Qsci更高水平。QsciScintilla对象。
1.3.2. PyQt5.Qsci.QsciScintilla
用于文本编辑的高级对象。它是低级别的一个子类PyQt5.Qsci.QsciScintillaBase对象,这意味着它可以访问所有的PyQt5.Qsci.QsciScintillaBase方法和属性。此对象将被使用的大多数时间的所有文本编辑目的,您将需要和有一个非常像qt的API。当使用名字QScintilla,我将永远指的是这个对象。
1.3.3. PyQt5.Qsci.QsciLexer
用于样式化文本(语法高亮显示)的抽象对象,通常在编程语言。这是一个抽象对象,必须被子类化才能进行自定义词法分析程序。已经有许多内置lexer可用,例如:QsciLexerPython,QsciLexerRuby。lexer需要应用于PyQt5.Qsci.QsciScintilla的实例对象使其开始对文本进行样式化。
1.3.4. PyQt5.Qsci.QsciAPIs
用于存储自定义自动完成和呼叫提示信息的对象。简而言之,将它分配给带有自动完成/启用呼叫提示,添加关键字的子类PyQt5.Qsci.QsciLexer的一个实例,你可以在编辑器中获得自定义自动完成
1.3.5. PyQt5.Qsci.QsciStyle
用于存储样式选项的对象,用于使用PyQt5.Qsci.QsciLexer样式化文本。此对象不必显式使用,它的选项是使用PyQt5.Qsci.QsciLexer的setFont, setPaper,…等方法(词法分析的所有方法样式作为第二个参数)。
只有少数情况下需要直接使用这个对象。一个是设置,另一种是在给行添加注释时。
1.4. QScintilla使用的PyQt对象
定制QScintilla组件需要各种PyQt对象,而有些则需要需要初始化PyQt应用程序。
1.4.1. PyQt5.QtWidgets.QApplication
QApplication对象管理GUI应用程序的控制流和主设置。这是一个对象,需要初始化并执行,以使QScintilla显示在屏幕上。
1.4.2. PyQt5.QtWidgets.QMainWindow
该对象提供了主应用程序窗口。它应该一直被用在主句中窗口小部件。如果您正在创建一个简单的QScintilla编辑器,没有任何附加功,去创建它吧。
1.4.3. PyQt5.QtWidgets.QWidget
QWidget对象是所有用户界面对象的基础对象。QScintilla对象和所有东西其他GUI对象从这个对象继承,这就是为什么它是相关的。
来自官方Qt 5文档:
这个小部件是用户界面的原子:它接收鼠标、键盘和其他东西事件,并在屏幕上绘 制自身的表示。每个小部件都是矩形的,它们按照z轴次序排列。
窗口小部件被其截断父控件和前面的控件。没有嵌入到父部件中的小部件称为窗 口。通常,窗户有框架和标题栏,虽然也可以创建没有这样的Windows装饰使用合适的window flags。在Qt中,QMainWindow和各种QDialog的子类是最常见的窗口类型。
1.4.4 PyQt5.QtGui.QFont
QScintilla使用PyQt的QFont对象来描述字体。QFont对象驻留在PyQt5.QtGui模块。与QScintilla相关的QFont对象的相关属性是:
•family:字体样式。例如:Courier, Times, Helvetica,…
•pointSize:以点为单位的字体大小。如果它被设置为小于1,它将默认为系统默认大小
•weight:字体粗细从0(超轻)到99(极黑)。预定义的值 QFont.Light, QFont.Normal, QFont.DemiBold, QFont.Bold and Qfont.Black。
•italic:倾斜的文本,True或False。
有关此对象的更多详细信息,请参阅PyQt的web文档。
你可能想知道如何改变字体的颜色,对吧?这就是样式这将在后面的章节中描述。
1.5. QScintilla视觉描述
在这里,我将描述QScintilla组件的各个部分这个文件,所以你会有一个清楚的想法,什么在哪里。更详细的研究。这些部分将在后面的章节中介绍。
1.5.1. 编辑区域
这是所有的编辑和样式(着色,…)的文本发生的地方。使用以下命令编辑文本鼠标和键盘,但也可以在Python代码中操作它。编辑区域为如下图中的红色矩形所示。
1.5.2. 边缘区域
这就是QScintilla文档的页边距所在的位置。边距是边栏它可以显示行号,其中有代码折叠选项,显示错误指示器,显示书签和任何你能想到的东西。QScintilla可以起飞到7个margins(我想?)边缘区域如下图所示。
1.5.3. 滚动条区域
这是显示滚动条的区域。水平的竖线总是控件中显示的垂直滚动条取决于行数文档和文档窗口大小。滚动条区域如下图所示。
1.5.4. 自动完成窗口
当文档中的自动完成功能处于活动状态时,文档窗口将显示目前的自动完成建议。默认情况下,不启用自动完成功能。一个例子自动完成窗口如下图所示。有时自动完成列表会在此文档中使用,而不是在窗口中使用。
1.5.5. 上下文菜单
默认情况下,只有右键单击上下文菜单显示一些标准的编辑选项在QScintilla组件中。自定义上下文菜单可以在Python代码中添加,但它们使用PyQt框架中本文档将不涉及的其他部分。QScintilla的默认的上下文菜单如下图所示。
1.6. QScintilla的默认设置
下面是QScintilla的默认设置。创建实例时需要设置这些参数QScintilla组件无需设置任何选项。
1.6.1. 默认的词法分析程序
默认情况下,在第一次创建QScintilla编辑组件时,没有为它设置lexer。有时我也会说lexer是禁用的,但这意味着同样的事情,没有lexer为编辑器设置。
1.6.2. 默认字体
当设置NO lexer时,QScintilla使用的默认字体取决于您的操作系统正在使用。在Windows上它是MS Shell Dlg 2 ,而在GNU/Linux Debian Jesse上它是Roboto。
默认字体颜色为黑色。字体的大小取决于您的系统设置。我有没有机会在其他系统上进行测试。
当文档有lexer设置时,它会覆盖您拥有的任何设置手动设置。如果您试图设置一些字体样式或颜色直接和什么也没有发生,这意味着在文档上设置了一个lexer,并且总是这样压倒你试图做出的改变。
1.6.3. 默认背景(Default paper)
在QScintilla中,文档的背景称为 paper。paper是文件的背景色。默认情况下,paper是白色的。
这里和字体是一样的。如果您试图直接设置paper颜色,但没有发生任何事情,这意味着在文档上设置了lexer,并总是覆盖您试图进行的更改。
1.6.4. 默认快捷键
下面是QScintilla使用的默认快捷方式的列表。
(注意:修复下面所有的描述)
• ‘Down’: 向下移动一行
• ‘Down+Shift’: 将选定文本向下扩展一行
• ‘Down+Ctrl’: 向下滚动视图一行
• ‘Down+Alt+Shift’: 将选区向下扩展一行
• ‘Up’: 向上移动一行
• ‘Up+Shift’: 将选中的文本向上扩展一行
• ‘Up+Ctrl’: 将视图向上滚动一行
• ‘Up+Alt+Shift’: 将选中的部分向上移动一行
• ‘[+Ctrl’: 将段落上移
• ‘[+Ctrl+Shift’: 将选中的部分向上延长一段
• ‘]+Ctrl’: 向下移动段落
• ‘]+Ctrl+Shift’: 将选区向下延长一段
• ‘Left’: SCI_CHARLEFT
• ‘Left+Shift’: SCI_CHARLEFTEXTEND
• ‘Left+Ctrl’: SCI_WORDLEFT
• ‘Left+Shift+Ctrl’: SCI_WORDLEFTEXTEND
• ‘Left+Alt+Shift’: SCI_CHARLEFTRECTEXTEND
• ‘Right’: SCI_CHARRIGHT
• ‘Right+Shift’: SCI_CHARRIGHTEXTEND
• ‘Right+Ctrl’: SCI_WORDRIGHT
• ‘Right+Shift+Ctrl’: SCI_WORDRIGHTEXTEND
• ‘Right+Alt+Shift’: SCI_CHARRIGHTRECTEXTEND
• ‘/+Ctrl’: SCI_WORDPARTLEFT
• ‘/+Ctrl+Shift’: SCI_WORDPARTLEFTEXTEND
• ‘\+Ctrl’: SCI_WORDPARTRIGHT
• ‘\+Ctrl+Shift’: SCI_WORDPARTRIGHTEXTEND
• ‘Home’: SCI_VCHOME
• ‘Home+Shift’: SCI_VCHOMEEXTEND
• ‘Ctrl+Home’: SCI_DOCUMENTSTART
• ‘Ctrl+End’: SCI_DOCUMENTSTARTEXTEND
• ‘Home+Alt’: SCI_HOMEDISPLAY
• ‘Home+Alt+Shift’: SCI_VCHOMERECTEXTEND
• ‘End’: SCI_LINEEND
• ‘End+Shift’: SCI_LINEENDEXTEND
• ‘Ctrl+End’: SCI_DOCUMENTEND
• ‘Ctrl+Shift+End’: SCI_DOCUMENTENDEXTEND
• ‘End+Alt’: SCI_LINEENDDISPLAY
• ‘End+Alt+Shift’: SCI_LINEENDRECTEXTEND
• ‘PageUp’: SCI_PAGEUP
• ‘Shift+PageUp’: SCI_PAGEUPEXTEND
• ‘PageUp+Alt+Shift’: SCI_PAGEUPRECTEXTEND
• ‘PageDown’: SCI_PAGEDOWN
• ‘Shift+PageDown’: SCI_PAGEDOWNEXTEND
• ‘PageDown+Alt+Shift’: SCI_PAGEDOWNRECTEXTEND
• ‘Delete’: SCI_CLEAR
• ‘Delete+Shift’: SCI_CUT
• ‘Ctrl+Delete’: SCI_DELWORDRIGHT
• ‘Ctrl+Shift+BackSpace’: SCI_DELLINERIGHT
• ‘Insert’: SCI_EDITTOGGLEOVERTYPE
• ‘Insert+Shift’: SCI_PASTE
• ‘Insert+Ctrl’: SCI_COPY
• ‘Escape’: SCI_CANCEL
• ‘Backspace’: SCI_DELETEBACK
• ‘Backspace+Shift’: SCI_DELETEBACK
• ‘Ctrl+BackSpace’: SCI_DELWORDLEFT
• ‘Backspace+Alt’: SCI_UNDO
• ‘Ctrl+Shift+BackSpace’: SCI_DELLINELEFT
• ‘Ctrl+Z’: SCI_UNDO
• ‘Ctrl+Y’: SCI_REDO
• ‘Ctrl+X’: SCI_CUT
• ‘Ctrl+C’: SCI_COPY
• ‘Ctrl+V’: SCI_PASTE
• ‘Ctrl+A’: SCI_SELECTALL
• ‘Tab’: SCI_TAB
• ‘Shift+Tab’: SCI_BACKTAB
• ‘Return’: SCI_NEWLINE
• ‘Return+Shift’: SCI_NEWLINE
• ‘Add+Ctrl’: SCI_ZOOMIN
• ‘Subtract+Ctrl’: SCI_ZOOMOUT
• ‘Divide+Ctrl’: SCI_SETZOOM
• ‘Ctrl+L’: SCI_LINECUT
• ‘Ctrl+Shift+L’: SCI_LINEDELETE
• ‘Ctrl+Shift+T’: SCI_LINECOPY
• ‘Ctrl+T’: SCI_LINETRANSPOSE
• ‘Ctrl+D’: SCI_SELECTIONDUPLICATE
• ‘U+Ctrl’: SCI_LOWERCASE
• ‘U+Ctrl+Shift’: SCI_UPPERCASE
1.6.5. 默认滚动条行为
默认情况下,只显示水平滚动条,它有一个默认的起始长度。当您输入更多文本时,水平滚动条会自动增长,并自动调整为文档中最长的行。当您删除文本时,垂直滚动条也会自动收缩,但它会收缩回默认大小。
只有当当前QScintilla文档的行数超过所能显示的行数时,才会出现垂直滚动条。当您添加行时,垂直滚动条会自动增长,而当您删除行时,它会自动收缩
1.6.6. 默认边距
QScintilla默认显示一个页边空白(one margin)。它的行为是,它选择该行的文本在用户使用鼠标左键单击页边距的位置旁边。
1.6.7. 默认自动完成的行为
默认情况下,禁用自动完成功能。
1.6.8. 默认的鼠标行为
鼠标的默认行为是按住鼠标左键并拖动来选择文本鼠标。右键单击文档中的任何地方都会显示上下文菜单。默认情况下,上下文菜单有以下选项:撤消、重做、剪切、复制、粘贴、删除和全选。当在编辑器中选择文本时。
1.6.9。默认编码
默认编码为ASCII码。未知字符将出现为问号(?)的象征。
2. 安装指南
注意,在本安装指南中,我提到了QScintilla2。QScintilla目前的版本是2.9.3,这就是2的来源。
目前只能通过Python3.5使用pip安装PyQt5。
2.1. Windows
为您的Python 3版本安装最新的PyQt5库(Riverbank Computing | Download),这可以通过在windows控制台中使用pip包管理器(如果您已经安装了它)通过以下命令轻松完成:
pip install PyQt5
另一种选择是安装Python 3编译时使用的Visual Studio版本,并从他们的官方网站编译源代码。您还需要下载SIP库源代码。下载源代码并按照自述/安装文件中的说明操作。您还需要Qt 5 c++源代码。
2.2. GNU / Linux
如果你使用的是Lubuntu、Raspbian或者大多数Debian衍生品,请安装以下软件
使用apt-get库:
•python3.x(可能已经安装在系统上)
•python3-pyqt5
•python3-pyqt5.qsci
另一个选项与Windows上一样,在您最喜欢的程序中使用pip和以下命令终端:
pip3 install PyQt5
注意,它是GNU/Linux上的pip3,因为它通常同时安装了Python2和Python3。
否则,您可以安装PyQt5和QScintilla2(您还需要SIP库)来源来自他们的官方网站。下载源代码并按照说明进行操作
readme /安装文件。您还需要Qt 5 c++源代码。
2.3. Mac OS
安装最新的Python3版本和pip包管理器,并使用以下方法在终端中输入命令:
pip install PyQt5
你可以尝试的另一件事是使用Anaconda Python 3和它的包管理器来安装所有
依赖关系。这里有更多的信息。
我不太了解Mac的,但你可以尝试使用默认的Mac包管理器来查找PyQt5和QScintilla2库或从源代码安装库,与在GNU/Linux上一样。