如何在自制的PyQt GUI中嵌入“QScintilla”代码编辑器?

时间:2016-07-06 10:48:32

标签: python-3.x pyqt scintilla scite qscintilla

我正在制作一个小型IDE - 主要是为了好玩!我用Python编写所有内容,并使用PyQt5库来构建GUI。

以下是当前状态的屏幕截图:

enter image description here

代码编辑器本身是一个简单的QTextEdit()小部件 - 嵌入在QFrame()小部件中,它本身嵌入在主窗口中。父子关系如下(稍微简化):

  

QMainWindow()>> QFrame()>> QTextEdit()

我使用PyQt5中的QSyntaxHighlighter()类实现了一些基本的语法突出显示。这很棒 - 但还不是很棒。 Bakuriu先生建议我看一下QScintilla包裹。现在我挣扎着几个问题:

问题1:安装QScintilla

这是我可以找到关于QScintilla2的http://pyqt.sourceforge.net/Docs/QScintilla2/的PyQt文档。显然在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,请发布一些示例代码。这将非常有用: - )

修改
几个月后,我回到了我的这个老问题。与此同时,我与我的朋友Matic Kukovec合作,制作了一个关于如何使用QScintilla的精彩教程:

enter image description here

https://qscintilla.com/

QScintilla是一个很棒的工具,但信息非常稀少。我希望这一举措能够提供急需的文件。

2 个答案:

答案 0 :(得分:1)

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_()

答案 1 :(得分:1)

谢谢Mr.Mss。 @DisplayName为您的答案。我得到了它的工作,我在这里为Windows用户添加了一个小注释。

我的系统如下:

_

第1步:

从网站https://pypi.python.org/pypi/QScintilla下载文件QScintilla-2.9.2-cp35-none-win_amd64.whl。 将文件放在文件夹中:

  

C:\ .. \ Anaconda \ Scripts \

我们将使用此.whl文件来安装QScintilla。

_

第2步:

以管理员权限打开Windows cmd工具!现在输入以下命令:

> 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步:

我没有收到消息&#34;已成功安装&#34;从第一枪开始。相反,我收到以下错误消息:

PermissionError: [Errno 13] Permission denied: 'C:\..\anaconda\Lib\site-packages\sip.pyd'

显然无法访问位于sip.pyd目录中的文件C:\..\anaconda\Lib\site-packages。所以我打开了另一个Windows命令shell(当然再次使用管理员权限!)并输入以下命令:

> icacls "C:\..\Anaconda\Lib\site-packages" /grant "Administrators":(OI)(CI)F /T

此命令将为所有&#34;管理员&#34;提供完全访问权限(读取 - 修改和写入)。用户查看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,它应该可以工作!