2016-07-06 8 views
0

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

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

enter image description here

Сам редактор кода является простой 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
Через несколько месяцев я вернулся к этому старому моему вопросу.В то же время, я сотрудничал с моим другом Matic Kukovec, в результате которого хороший учебник о том, как использовать QScintilla:

enter image description here

https://qscintilla.com/

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

ответ

1

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

спасибо @DisplayName! Так что не нужно строить и/или устанавливать QScintilla для использования в моем графическом интерфейсе PyQt5? Просто импорт достаточно? Это потрясающе –

+0

жаль, что я не был достаточно ясен, я не ответил Q1, потому что я не использую окна, но да, вам нужно установить его, это не часть Qt или PyQt. Например, на linux я бы сделал 'apt-get install python3-pyqt5.qsci' –

+0

Большое спасибо. Ваш ответ действительно помог мне :-) –

1

Спасибо Mr./Mss. @DisplayName для вашего ответа. Я получил его работу, и я добавил немного оповещения для пользователей Windows.

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

S TEP 1:

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

C: \ .. \ Anaconda \ Scripts \

Мы будем использовать этот .whl файл, чтобы сделать установку QScintilla.

_

ШАГ 2:

cmd Откройте инструмент для Windows с правами администратора! Теперь введите следующую команду:

> 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 

Теперь вы можете повторить STEP 2, и это должно сработать!

Смежные вопросы