Как встроить редактор кода QScintilla в самодельный графический интерфейс PyQt?

Я делаю небольшую IDE - в основном для развлечения! Я пишу все на Python и использую библиотеку PyQt5 для создания графического интерфейса.

Вот скриншот текущего состояния:

введите здесь описание изображения

Сам редактор кода представляет собой простой виджет QTextEdit(), встроенный в виджет QFrame(), который сам встроен в главное окно. Таким образом, отношения родитель-потомок выглядят следующим образом (немного упрощенно):

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

Я реализовал базовую подсветку синтаксиса, используя класс QSyntaxHighlighter() из PyQt5. Это здорово, но еще не потрясающе. Г-н Бакуриу посоветовал мне взглянуть на пакет 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, как мне его использовать для встраивания редактора QScintilla в QFrame?


Вопрос 2: Scintilla или SciTE?

Читая о Scintilla (и QScintilla), я наткнулся на SciTE. Кто-то сделал хороший установщик для этого программного обеспечения: http://www.ebswift.com/scite-text-editor-installer.html . Было бы целесообразно встроить SciTE в мой графический интерфейс PyQt? И если да, то не нужен ли мне «QSciTE» вместо простого «SciTE»?


Вопрос 3. Пример кода

После установки (Q)Scintilla или (Q)SciTE мне нужно будет как-то приступить к работе. Если кто-то уже внедрил Scintilla/SciTE в графический интерфейс PyQt, опубликуйте пример кода. Это было бы очень полезно :-)


EDIT
Через несколько месяцев я вернулся к своему старому вопросу. Тем временем я сотрудничал с моим другом Матиком Куковеком, в результате чего получился хороший туториал по использованию QScintilla:

введите здесь описание изображения

https://qscintilla.com/

QScintilla — прекрасный инструмент, но информации о нем очень мало. Я надеюсь, что эта инициатива может предоставить столь необходимую документацию.


person K.Mulier    schedule 06.07.2016    source источник


Ответы (2)


Q1:

Вам необходимо установить QScintilla и привязки Python. Я не знаю для Windows, но, похоже, он доступен на pip.

Q2:

Scintilla — виджет редактора. SciTE — это полноценное приложение, использующее виджет редактора, написанный на языке Lua. QScintilla — это порт Qt виджета редактора Scintilla.

Q3:

Объект QsciScintilla является подклассом QWidget, поэтому вы можете просто запустить:

from PyQt5.QtWidgets import QApplication
from PyQt5.Qsci import QsciScintilla

app = QApplication([])
sci = QsciScintilla()
sci.show()
app.exec_()
person λuser    schedule 06.07.2016
comment
Спасибо, @DisplayName! Значит, не нужно собирать и/или устанавливать QScintilla, чтобы использовать его в моем графическом интерфейсе PyQt5? Достаточно импорта? Это круто ???? - person K.Mulier; 06.07.2016
comment
извините, я недостаточно ясно выразился, я не ответил на Q1, потому что я не использую Windows, но да, вам нужно установить его, он не является частью Qt или PyQt. Например, в Linux я бы сделал apt-get install python3-pyqt5.qsci - person λuser; 06.07.2016
comment
Большое Вам спасибо. Ваш ответ мне очень помог :-) - person K.Mulier; 06.07.2016
comment
Есть ли разница между QSciScintilla и QScintilla? - person K.Mulier; 06.07.2016
comment
QScintilla — это человеческое имя библиотеки, Qsci — это подмодуль PyQt, QsciScintilla — класс виджета редактора (и QsciScintilla — класс виджета редактора более низкого уровня, унаследованный QsciScintilla) - person λuser; 06.07.2016

Спасибо, мистер/мисс. @DisplayName за ваш ответ. У меня все заработало, и я разместил здесь небольшую заметку для пользователей Windows.

Моя система выглядит следующим образом:

_

ШАГ 1:

Загрузите файл QScintilla-2.9.2-cp35-none-win_amd64.whl с сайта https://pypi.python.org/pypi/QScintilla. Поместите файл в папку:

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

_

ШАГ 3:

Я не получил сообщение «Успешно установлено» с первого раза. Вместо этого я получил следующее сообщение об ошибке:

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

Очевидно, файл sip.pyd, находящийся в каталоге C:\..\anaconda\Lib\site-packages, недоступен. Поэтому я открыл еще одну командную оболочку Windows (конечно, снова с правами администратора!) и набрал следующую команду:

> 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, и он должен сработать!

person K.Mulier    schedule 06.07.2016