【问题标题】:How to embed 'QScintilla' code editor in self-made PyQt GUI?如何在自制的 PyQt GUI 中嵌入“QScintilla”代码编辑器?
【发布时间】:2016-07-06 10:48:32
【问题描述】:

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

这是当前状态的截图:

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

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

我使用 PyQt5 中的 QSyntaxHighlighter() 类实现了一些基本的语法高亮。这很棒——但还不是很棒。 Bakuriu 先生建议我看看QScintilla 包。现在我在纠结几个问题:


问题 1:安装 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-file。但是这个下载页面并没有在任何地方提到 PyQt。所以我想知道dll-file 是否可以在 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 的精彩教程:

https://qscintilla.com/

QScintilla 是一个很棒的工具,但信息非常稀缺。我希望这个倡议可以提供急需的文档。

【问题讨论】:

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


    【解决方案1】:

    第一季度:

    您需要安装 QScintilla 和 Python 绑定。我不知道 Windows,但它似乎在 pip 上可用。

    第二季度:

    Scintilla 是编辑器小部件。 SciTE 是一个使用编辑器小部件的完整应用程序,可使用 Lua 语言编写脚本。 QScintilla 是 Scintilla 编辑器小部件的 Qt 端口。

    第三季度:

    QsciScintilla 对象是 QWidget 的子类,因此您可以简单地运行:

    from PyQt5.QtWidgets import QApplication
    from PyQt5.Qsci import QsciScintilla
    
    app = QApplication([])
    sci = QsciScintilla()
    sci.show()
    app.exec_()
    

    【讨论】:

    • 谢谢@DisplayName!所以不需要构建和/或安装 QScintilla 来在我的 PyQt5 GUI 中使用它?一个进口就够了吗?太棒了?
    • 对不起,我不够清楚,我没有回答 Q1 因为我不使用 windows,但是是的,你需要安装它,它不是 Qt 或 PyQt 的一部分。例如在 linux 上我会做apt-get install python3-pyqt5.qsci
    • 非常感谢。你的回答真的帮了我:-)
    • QSciScintilla和QScintilla有区别吗?
    • QScintilla 是库的人名,Qsci 是 PyQt 子模块,QsciScintilla 是编辑器小部件类(而 QsciScintilla 是较低级别的编辑器小部件类,由 QsciScintilla 继承)
    【解决方案2】:

    谢谢先生/女士。 @DisplayName 为您解答。我得到了它的工作,我在这里为 Windows 用户放了一点旁注。

    我的系统如下:

    _

    第 1 步:

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

    C:\..\Anaconda\脚本\

    我们将使用这个.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 步:

    第一次拍摄时我没有收到“安装成功”的消息。相反,我收到以下错误消息:

    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
    

    此命令将授予所有“管理员”用户对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 步,它应该可以工作了!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-11-07
      • 1970-01-01
      • 2014-05-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-24
      • 1970-01-01
      相关资源
      最近更新 更多