如何在自制的 PyQt GUI 中嵌入 'QScintilla' 代码编辑器?
How to embed 'QScintilla' code editor in self-made PyQt GUI?
我在做一个小的IDE——主要是为了好玩!我在 Python 中编写所有内容,并使用 PyQt5 库构建 GUI。
这是当前状态的屏幕截图:
代码编辑器本身是一个简单的 QTextEdit()
小部件 - 嵌入在 QFrame()
小部件中,后者本身嵌入在主 window 中。所以父子关系如下(只是简化了一点):
QMainWindow( ) >> QFrame( ) >> QTextEdit( )
我使用 PyQt5 中的 QSyntaxHighlighter()
class 实现了一些基本的语法高亮。太棒了——但还不够棒。 Bakuriu 先生建议我看看 QScintilla
包。现在我纠结于几个问题:
问题一:安装QScintilla
这是我可以找到的关于 QScintilla2 的 PyQt 文档:http://pyqt.sourceforge.net/Docs/QScintilla2/。显然在 Windows 上,我需要下载 QScintilla2 的源代码并将其构建到 dll
文件中。没有更方便的方法吗?例如,一些预构建的包(带有安装程序)?
我还找到了这个下载页面:http://www.scintilla.org/ScintillaDownload.html。下载页面提到:<<There is no download available containing only the Scintilla DLL. However, it is included in the SciTE executable full download as SciLexer.DLL.>>
。因此,如果我解释正确,我可以通过这种方式获得预构建的 Scintilla dll
文件。但是这个下载页面并没有在任何地方提到 PyQt。所以我想知道 dll
文件是否可以在 PyQt 中运行。毕竟下载是Scintilla
,不是QScintilla
.
获得 dll
文件后,如何实际使用它在 QFrame 中嵌入 QScintilla 编辑器?
问题 2:Scintilla 还是 SciTE?
在阅读有关 Scintilla(和 QScintilla)的文章时,我偶然发现了 SciTE。有人为这个软件做了一个很好的安装程序:http://www.ebswift.com/scite-text-editor-installer.html。在我的 PyQt GUI 中嵌入 SciTE 是否可取?如果是这样 - 我不需要 'QSciTE' 而不是普通的 'SciTE' 吗?
问题 3:一些示例代码
安装 (Q)Scintilla 或 (Q)SciTE 后,我需要以某种方式开始。如果有人已经在 PyQt GUI 中嵌入 Scintilla/SciTE,请 post 一些示例代码。这将非常有帮助:-)
编辑
几个月后,我回到了我的这个老问题。与此同时,我与我的朋友 Matic Kukovec 合作,制作了一个关于如何使用 QScintilla 的很好的教程:
QScintilla 是一个很棒的工具,但信息非常稀缺。我希望这项倡议能够提供急需的文档。
Q1:
您需要安装 QScintilla 和 Python 绑定。我不知道 Windows,但它似乎在 pip 上可用。
Q2:
Scintilla 是编辑器小部件。 SciTE 是一个使用编辑器小部件的完整应用程序,可以用 Lua 语言编写脚本。 QScintilla 是 Scintilla 编辑器小部件的 Qt 端口。
Q3:
一个QsciScintilla对象是QWidget的子类,所以你可以简单地运行:
from PyQt5.QtWidgets import QApplication
from PyQt5.Qsci import QsciScintilla
app = QApplication([])
sci = QsciScintilla()
sci.show()
app.exec_()
谢谢先生/女士。 @DisplayName 为您解答。我让它工作了,我在这里为 Windows 用户做了一些旁注。
我的系统如下:
- Windows10、64 位 OS
- 已安装 Anaconda 软件包 (Python 3.5)
- 已安装 PyQt5(从 https://www.riverbankcomputing.com/software/pyqt/download5 下载
.exe
安装程序)
_
第 1 步:
从站点 https://pypi.python.org/pypi/QScintilla 下载文件 QScintilla-2.9.2-cp35-none-win_amd64.whl
。
将文件放入文件夹:
C: \ .. \ Anaconda \ Scripts \
我们将使用这个 .whl
文件来安装 QScintilla。
_
第 2 步:
用管理员权限打开Windowscmd
工具!现在键入以下命令:
> cd "C:\..\Anaconda\Scripts"
这会将 cmd
shell 带到正确的位置。现在键入以下命令:
> pip3 install QScintilla
如果一切顺利,您会收到以下消息:
> pip3 install QScintilla
Collecting QScintilla
Downloading QScintilla-2.9.2-cp35-none-win_amd64.whl (1.6MB)
100% |################################| 1.6MB 984kB/s
Collecting PyQt5 (from QScintilla)
Downloading PyQt5-5.6-cp35-none-win_amd64.whl (74.7MB)
100% |################################| 74.7MB 23kB/s
Collecting sip (from PyQt5->QScintilla)
Downloading sip-4.18-cp35-none-win_amd64.whl (46kB)
100% |################################| 51kB 5.7MB/s
Installing collected packages: sip, PyQt5, QScintilla
..
Successfully installed PyQt5-5.6 QScintilla-2.9.2 sip-4.18
_
第 3 步:
我没有收到第一张照片的消息 "Successfully installed"。相反,我收到以下错误消息:
PermissionError: [Errno 13] Permission denied: 'C:\..\anaconda\Lib\site-packages\sip.pyd'
显然无法访问目录 C:\..\anaconda\Lib\site-packages
中的文件 sip.pyd
。所以我打开了另一个 Windows 命令 shell (当然又是管理员权限!)并输入以下命令:
> icacls "C:\..\Anaconda\Lib\site-packages" /grant "Administrators":(OI)(CI)F /T
此命令将授予所有 "Administrator" 用户对 site-packages
文件夹中的所有文件及其子文件夹中的所有文件的完全访问权限(读取 - 修改和写入)。执行此命令时,您应该会收到以下消息:
...
processed file: C:\..\Anaconda\Lib\site-packages\__pycache__\readline.cpython-35.pyc
processed file: C:\..\Anaconda\Lib\site-packages\__pycache__\simplegeneric.cpython-35.pyc
processed file: C:\..\Anaconda\Lib\site-packages\__pycache__\six.cpython-35.pyc
processed file: C:\..\Anaconda\Lib\site-packages\__pycache__\test_path.cpython-35.pyc
processed file: C:\..\Anaconda\Lib\site-packages\__pycache__\test_pycosat.cpython-35.pyc
...
Successfully processed 38589 files; Failed processing 0 files
现在您可以重复第 2 步,应该可以了!
我在做一个小的IDE——主要是为了好玩!我在 Python 中编写所有内容,并使用 PyQt5 库构建 GUI。
这是当前状态的屏幕截图:
代码编辑器本身是一个简单的 QTextEdit()
小部件 - 嵌入在 QFrame()
小部件中,后者本身嵌入在主 window 中。所以父子关系如下(只是简化了一点):
QMainWindow( ) >> QFrame( ) >> QTextEdit( )
我使用 PyQt5 中的 QSyntaxHighlighter()
class 实现了一些基本的语法高亮。太棒了——但还不够棒。 Bakuriu 先生建议我看看 QScintilla
包。现在我纠结于几个问题:
问题一:安装QScintilla
这是我可以找到的关于 QScintilla2 的 PyQt 文档:http://pyqt.sourceforge.net/Docs/QScintilla2/。显然在 Windows 上,我需要下载 QScintilla2 的源代码并将其构建到 dll
文件中。没有更方便的方法吗?例如,一些预构建的包(带有安装程序)?
我还找到了这个下载页面:http://www.scintilla.org/ScintillaDownload.html。下载页面提到:<<There is no download available containing only the Scintilla DLL. However, it is included in the SciTE executable full download as SciLexer.DLL.>>
。因此,如果我解释正确,我可以通过这种方式获得预构建的 Scintilla dll
文件。但是这个下载页面并没有在任何地方提到 PyQt。所以我想知道 dll
文件是否可以在 PyQt 中运行。毕竟下载是Scintilla
,不是QScintilla
.
获得 dll
文件后,如何实际使用它在 QFrame 中嵌入 QScintilla 编辑器?
问题 2:Scintilla 还是 SciTE?
在阅读有关 Scintilla(和 QScintilla)的文章时,我偶然发现了 SciTE。有人为这个软件做了一个很好的安装程序:http://www.ebswift.com/scite-text-editor-installer.html。在我的 PyQt GUI 中嵌入 SciTE 是否可取?如果是这样 - 我不需要 'QSciTE' 而不是普通的 'SciTE' 吗?
问题 3:一些示例代码
安装 (Q)Scintilla 或 (Q)SciTE 后,我需要以某种方式开始。如果有人已经在 PyQt GUI 中嵌入 Scintilla/SciTE,请 post 一些示例代码。这将非常有帮助:-)
编辑
几个月后,我回到了我的这个老问题。与此同时,我与我的朋友 Matic Kukovec 合作,制作了一个关于如何使用 QScintilla 的很好的教程:
QScintilla 是一个很棒的工具,但信息非常稀缺。我希望这项倡议能够提供急需的文档。
Q1:
您需要安装 QScintilla 和 Python 绑定。我不知道 Windows,但它似乎在 pip 上可用。
Q2:
Scintilla 是编辑器小部件。 SciTE 是一个使用编辑器小部件的完整应用程序,可以用 Lua 语言编写脚本。 QScintilla 是 Scintilla 编辑器小部件的 Qt 端口。
Q3:
一个QsciScintilla对象是QWidget的子类,所以你可以简单地运行:
from PyQt5.QtWidgets import QApplication
from PyQt5.Qsci import QsciScintilla
app = QApplication([])
sci = QsciScintilla()
sci.show()
app.exec_()
谢谢先生/女士。 @DisplayName 为您解答。我让它工作了,我在这里为 Windows 用户做了一些旁注。
我的系统如下:
- Windows10、64 位 OS
- 已安装 Anaconda 软件包 (Python 3.5)
- 已安装 PyQt5(从 https://www.riverbankcomputing.com/software/pyqt/download5 下载
.exe
安装程序)
_
第 1 步:
从站点 https://pypi.python.org/pypi/QScintilla 下载文件 QScintilla-2.9.2-cp35-none-win_amd64.whl
。
将文件放入文件夹:
C: \ .. \ Anaconda \ Scripts \
我们将使用这个 .whl
文件来安装 QScintilla。
_
第 2 步:
用管理员权限打开Windowscmd
工具!现在键入以下命令:
> cd "C:\..\Anaconda\Scripts"
这会将 cmd
shell 带到正确的位置。现在键入以下命令:
> pip3 install QScintilla
如果一切顺利,您会收到以下消息:
> pip3 install QScintilla
Collecting QScintilla
Downloading QScintilla-2.9.2-cp35-none-win_amd64.whl (1.6MB)
100% |################################| 1.6MB 984kB/s
Collecting PyQt5 (from QScintilla)
Downloading PyQt5-5.6-cp35-none-win_amd64.whl (74.7MB)
100% |################################| 74.7MB 23kB/s
Collecting sip (from PyQt5->QScintilla)
Downloading sip-4.18-cp35-none-win_amd64.whl (46kB)
100% |################################| 51kB 5.7MB/s
Installing collected packages: sip, PyQt5, QScintilla
..
Successfully installed PyQt5-5.6 QScintilla-2.9.2 sip-4.18
_
第 3 步:
我没有收到第一张照片的消息 "Successfully installed"。相反,我收到以下错误消息:
PermissionError: [Errno 13] Permission denied: 'C:\..\anaconda\Lib\site-packages\sip.pyd'
显然无法访问目录 C:\..\anaconda\Lib\site-packages
中的文件 sip.pyd
。所以我打开了另一个 Windows 命令 shell (当然又是管理员权限!)并输入以下命令:
> icacls "C:\..\Anaconda\Lib\site-packages" /grant "Administrators":(OI)(CI)F /T
此命令将授予所有 "Administrator" 用户对 site-packages
文件夹中的所有文件及其子文件夹中的所有文件的完全访问权限(读取 - 修改和写入)。执行此命令时,您应该会收到以下消息:
...
processed file: C:\..\Anaconda\Lib\site-packages\__pycache__\readline.cpython-35.pyc
processed file: C:\..\Anaconda\Lib\site-packages\__pycache__\simplegeneric.cpython-35.pyc
processed file: C:\..\Anaconda\Lib\site-packages\__pycache__\six.cpython-35.pyc
processed file: C:\..\Anaconda\Lib\site-packages\__pycache__\test_path.cpython-35.pyc
processed file: C:\..\Anaconda\Lib\site-packages\__pycache__\test_pycosat.cpython-35.pyc
...
Successfully processed 38589 files; Failed processing 0 files
现在您可以重复第 2 步,应该可以了!