2016-07-06 209 views
0

我在做一个小IDE - 主要是为了好玩!我用Python编写所有东西,并使用PyQt5库构建GUI。如何在自制的PyQt GUI中嵌入'QScintilla'代码编辑器?

这里的当前状态截图:

enter image description here

代码编辑器本身是一个简单的QTextEdit()部件 - 嵌入QFrame()小部件,它本身嵌入在主窗口。所以,父母和孩子之间的关系如下(只是有点简化):

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

我实现了一些基本的语法高亮,使用来自PyQt5的QSyntaxHighlighter()类。这很棒 - 但还不够棒。 Bakuriu先生建议我看看QScintilla包装。现在,我有几个问题挣扎:


问题1:安装QScintilla

这是PyQt的文档,我可以找到有关QScintilla2: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)赛特,我将需要得到某种方式启动。如果有人已经在PyQt GUI中嵌入了Scintilla/SciTE,请发布一些示例代码。这将是非常有益的:-)


编辑
几个月来,我又回到了我的这个老问题之后。

enter image description here

https://qscintilla.com/

QScintilla是一个奇妙的工具,但信息是非常稀少:在此期间,我与我的朋友马蒂奇Kukovec,这导致对如何使用QScintilla一个很好的教程合作。我希望这一举措能够提供非常需要的文件。

回答

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

谢谢@DisplayName!那么不需要构建和/或安装QScintilla来在我的PyQt5 GUI中使用它?只要进口就足够了?这太棒了 –

+0

对不起,我没有清楚,我没有回答Q1,因为我没有使用Windows,但是,你需要安装它,它不是Qt或PyQt的一部分。例如在Linux上,我会'apt-get install python3-pyqt5.qsci' –

+0

非常感谢。你的回答确实对我有帮助:-) –

1

谢谢Mr./Mss。 @DisplayName为你的答案。我得到了它的工作,并为Windows用户提供了一个小旁注。

我的系统是如下:

_

S TEP 1:

从站点https://pypi.python.org/pypi/QScintilla下载文件QScintilla-2.9.2-cp35-none-win_amd64.whl。 把文件夹中:

C:\ .. \蟒蛇\脚本\

我们将利用这个.whl文件做QScintilla的安装。

_

第2步:

打开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 

_

STEP 3:

我没拿到从第一张照片中“成功安装”消息。相反,我得到了以下错误消息:

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 

此命令将充分访问权限(读 - 修改和写入),为所有的“管理员”用户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,它应该可以工作!

相关问题