代码之家  ›  专栏  ›  技术社区  ›  K.Mulier

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

  •  1
  • K.Mulier  · 技术社区  · 8 年前

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

    enter image description here

    代码编辑器本身是一个简单的 QTextEdit() QFrame() widget,它本身嵌入在主窗口中。因此,父子关系如下(只是稍微简化了一点):

    QMainWindow()>>Q帧()>>QTextEdit()

    我使用 QSyntaxHighlighter() 来自PyQt5的课程。这很好,但还不太棒。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 动态链接库 -以这种方式归档。但是这个下载页面在任何地方都没有提到PyQt。所以我想知道 动态链接库 -文件将在PyQt中工作。毕竟,下载内容是 Scintilla .

    一旦我得到 动态链接库


    问题2:Scintilla还是SciTE?

    在读到关于Scintilla(和QScintilla)的文章时,我偶然发现了SciTE。有人为这个软件做了一个很好的安装程序: http://www.ebswift.com/scite-text-editor-installer.html


    一旦安装了(Q)Scintilla或(Q)SciTE,我将需要以某种方式开始。如果有人已经在PyQt GUI中嵌入了Scintilla/SciTE,请发布一些示例代码。这将非常有用:-)


    编辑
    几个月后,我又回到了我的这个老问题。同时,我还与我的朋友Matic Kukovec合作,完成了一个关于如何使用QScintilla的很好的教程:

    enter image description here

    https://qscintilla.com/

    2 回复  |  直到 7 年前
        1
  •  2
  •   λuser    8 年前

    问题1:

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

    问题2:

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

    问题3:

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

    from PyQt5.QtWidgets import QApplication
    from PyQt5.Qsci import QsciScintilla
    
    app = QApplication([])
    sci = QsciScintilla()
    sci.show()
    app.exec_()
    
        2
  •  1
  •   K.Mulier    8 年前

    谢谢您,先生/女士@为您的答案显示名称。我让它工作起来了,我在这里为Windows用户添加了一点旁注。

    我的系统如下:

    _

    第1步:

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

    我们会用这个 .whl 文件来安装QScintilla。

    _

    第二步:

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

    > cd "C:\..\Anaconda\Scripts"
    

    这带来了 cmd公司 把炮弹打到正确的位置。现在键入以下命令:

    > 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
    

    _

    第三步:

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

    显然是文件 sip.pyd 坐在目录中 C:\..\anaconda\Lib\site-packages

    > 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,它应该可以工作了!