Interested Article - PyQt
- 2020-07-29
- 1
PyQt — набор расширений (биндингов) графического фреймворка Qt для языка программирования Python , выполненный в виде расширения Python.
PyQt разработан британской компанией Riverbank Computing . PyQt работает на всех платформах, поддерживаемых Qt: Linux и другие UNIX-подобные ОС , macOS и Windows . Существует 3 версии: PyQt6, PyQt5 и PyQt4, поддерживающие соответствующие версии Qt. PyQt распространяется под лицензиями GPL (2 и 3 версии) и коммерческой .
PyQt практически полностью реализует возможности Qt. Это более 600 классов , более 6000 функций и методов, включая:
- Существующий набор виджетов графического интерфейса;
- стили виджетов;
- доступ к базам данных с помощью SQL ( ODBC , MySQL , PostgreSQL , Oracle );
- QScintilla, основанный на Scintilla виджет текстового редактора;
- поддержку интернационализации (i18n);
- парсер XML ;
- поддержку SVG ;
- интеграцию с WebKit , движком рендеринга HTML;
- поддержку воспроизведения видео и аудио.
PyQt также включает в себя Qt Designer ( Qt Creator ) — дизайнер графического интерфейса пользователя. Программа pyuic генерирует Python код из файлов, созданных в Qt Designer. Это делает PyQt очень полезным инструментом для быстрого прототипирования. Кроме того, можно добавлять новые графические элементы управления, написанные на Python, в Qt Designer.
Раньше PyQt поставлялся вместе со средой разработки Eric , написанной на PyQt. Eric имеет встроенный отладчик и может быть использована для создания консольных программ. Теперь она доступна в качестве отдельного проекта .
Обзор основных модулей
- QtCore — основные не графические классы: система сигналов и слотов, платформонезависимые абстракции для Unicode , потоков, разделяемой памяти, регулярных выражений и т. д.
- QtGui — компоненты графического интерфейса (элементы управления), основанные на визуальном представлении.
- QtNetwork — классы для сетевого программирования. Например, клиентов и серверов через UDP и TCP .
- QtOpenGL — классы, позволяющие использовать OpenGL и 3D-графику в приложениях PyQt.
- QtScript — классы, позволяющие использовать встроенный в Qt интерпретатор JavaScript для управления приложением.
- QtSql — классы для интеграции с базами данных с помощью SQL.
- QtSvg — классы для отображения векторной графики в формате SVG .
- QtXml — классы, реализующие обработку XML.
- uic — реализация обработки XML-файлов, созданных в Qt Designer, для генерации из них Python-кода графического интерфейса .
Дизайнер графического интерфейса пользователя
Qt Designer является кроссплатформенным компоновщиком макетов и форм графического интерфейса пользователя. Он позволяет быстро спроектировать виджеты и диалоги, используя экранные формы с использованием тех же виджетов, которые будут использоваться в приложении. Формы, созданные с Qt Designer, являются полностью функциональными, а также могут быть просмотрены в режиме реального времени .
Примеры программ
Программа Hello, world!
Стандартный минималистичный пример, дающий представление о PyQt. Программа показывает пустое окно, обладающее базовыми функциями — изменение размера, сворачивание, разворачивание:
#! /usr/bin/env python2
# -*- coding: utf-8 -*-
#
import sys
from PyQt4.QtGui import * # компоненты интерфейса
# Каждое приложение должно создать объект QApplication
# sys.argv - список аргументов командной строки
application = QApplication(sys.argv)
# QWidget - базовый класс для всех объектов интерфейса
# пользователя; если использовать для виджета конструктор
# без родителя, такой виджет станет окном
widget = QWidget()
widget.resize(320, 240) # изменить размеры виджета
widget.setWindowTitle("Hello, World!") # установить заголовок
widget.show() # отобразить окно на экране
sys.exit(application.exec_()) # запуск основного цикла приложения
Более сложный пример
В этом примере показаны принципы создания более серьёзных программ. Используется Python 3 и Qt Designer. Применяется объектно-ориентированный подход, позволяющий разделить визуальное представление и логику программы.
Состав программы:
- test.pyw — главный файл, запускающий программу.
- mainform.py — файл описания главного окна.
- mainform.ui — файл, содержащий автоматически сгенерированное при помощи Qt Designer описание главного окна. В программе Qt Designer был создан проект, основанный на QDialog и выбраны 2 элемента: кнопка с именем pushButton , текстовая метка с именем label .
Содержание файла test.pyw :
#! /usr/bin/env python3
#
import sys
from PyQt4 import QtCore, QtGui # подключает основные модули PyQt
import mainform # подключает модуль описания формы
def main():
app = QtGui.QApplication(sys.argv) # создаёт основной объект программы
form = mainform.MainForm() # создаёт объект формы
form.show() # даёт команду на отображение объекта формы и содержимого
return app.exec() # запускает приложение
if __name__ == "__main__":
sys.exit(main())
Содержание файла mainform.py :
#! /usr/bin/env python3
#
from PyQt4 import QtCore, QtGui, uic # подключает основные модули PyQt
# прототип главной формы
class MainForm(QtGui.QDialog):
# конструктор
def __init__(self):
super(MainForm, self).__init__()
# динамически загружает визуальное представление формы
uic.loadUi("mainform.ui", self)
# связывает событие нажатия на кнопку с методом
self.connect(self.pushButton, QtCore.SIGNAL("clicked()"),
self.setLabelText)
def setLabelText(self):
self.label.setText("New label text")
В этом примере довольно простая функциональность, представленная методом setLabelText . Однако при необходимости реализовать более сложную обработку поступающих данных, целесообразно вынести эту обработку в отдельный модуль (файл).
SIP
— это инструмент для автоматической генерации Python-привязок к C и C++ библиотекам. Первоначально SIP был разработан в 1998 году для PyQt — Python-привязки для инструментария виджетов Qt, но подходит и для создания привязок к любым другим C или C++ библиотекам .
SIP берёт набор инструкций (.sip файлы), описывающих API и генерирует требуемый C++ код. Потом он компилируется и на выходе получается модуль Python. Файлы .sip — файлы заголовков класса, у которых кое-что убрано (потому что SIP не содержит полноценный C++-парсер) и кое-что добавлено (поскольку C++ не несёт достаточной информации о работе API).
Для PyQt4 используется внутренний инструмент (написанный на PyQt), называемый metasip. Это своего рода IDE для SIP. Он использует GCC -XML для разбора заголовочных файлов последней версии и сохраняет релевантные данные в XML, в metasip-проект. metasip далее делает некое подобие diff с предыдущей версией API и отмечает все изменения, которые необходимо просмотреть. Затем список изменений генерируется при помощи GUI и автоматически заносится в TODO . Создание .sip файлов — просто нажатие на кнопку.
Что касается работы сгенерированного кода, она не сильно отличается от работы любого другого генератора привязок. У Python очень хороший API модулей — это одна из причин большого количества Python-привязок для инструментов сторонних разработчиков. Для каждого C++-класса SIP генерирует C-код, создающий соответствующий Python-класс .
Особенности лицензирования
Двойная лицензия PyQt продиктована довольно сложными отношениями в сфере применения этой надстройки (привязки) над графической библиотекой Qt. В соответствии с лицензией GPL , возможно использование библиотеки для создания программ с открытым исходным кодом . Если нет возможности распространять код в соответствии с условиями GPL, то можно приобрести коммерческую лицензию .
Со стороны Nokia были попытки договориться с Riverbank Computing на предмет смены лицензии, но они не увенчались успехом. В результате возник проект под названием PySide — аналог PyQt, в том числе сохраняющий совместимость с последним на уровне API, но выпущенный под лицензией LGPL , чтобы дать возможность разработчикам и коммерческих проектов бесплатно использовать Python в связке с Qt.
Однако Riverbank не исключает возможности лицензирования PyQt под LGPL в будущем.
История
Riverbank Computing Limited с 1998 года разрабатывает и поддерживает PyQt, привязки, которые позволяют использовать Qt для работы с языком программирования Python .
- Разработка началась с создания SIP и выпуска PyQt 0.1 с поддержкой Qt 1.41 в ноябре 1998 ;
- в версии 2.0, которая вышла в 2000, реализована поддержка Qt 2.2 на Linux и Windows ;
- поддержка Qt 3 реализована в 2001 ;
- поддержка Mac OS X реализована в 2002 ;
- выпуск PyQt4 начался с PyQt 4.0 с поддержкой Qt 4 в июне 2006 ;
- в версии 4.5, которая вышла 5 июня 2009, реализована поддержка Python 3 ;
- в версии 4.7, которая вышла 14 января 2010, реализована поддержка Qt 4.6 ;
- в версии 5.0, которая вышла 17 июня 2013, реализована поддержка Qt 5.0 .
Известные программы, использующие PyQt
- Cura — приложение нарезки 3D-модели для 3D-принтеров с открытым исходным кодом.
- — популярный open-source Bitcoin криптокошелек.
- Arduino IDE — реализация Arduino на PyQt.
- Jabbim — кроссплатформенная открытая программа мгновенного обмена сообщениями по протоколу XMPP .
- Eric IDE — интегрированная среда разработки для Python;
- — графический симулятор сети.
- Anki — программа для облегчения запоминания слов, выражений и любой другой информации с помощью интервальных повторений.
- Calibre — приложение для управления электронными книгами
- Dropbox — файлообменник
- — кроссплатформенный файловый менеджер
- — отладчик регулярных выражений Python
- — планировщик и редактор грамотного программирования
- — расширяемая среда разработки Python с открытым исходным кодом
- — программа проекции текстов с открытым исходным кодом
- OpenShot — программа для редактирования видео
- — структура интеллектуального анализа данных и визуализации
- — кроссплатформенный редактор тегов ID3 с открытым исходным кодом
- QGIS — бесплатное программное обеспечение для настольных ГИС -систем
- qt-recordMyDesktop , Интерфейс Qt4 для recordMyDesktop
- Spyder — Python Data Science IDE
- TortoiseHg — графический интерфейс для программы управления источниками Mercurial (Hg)
- — научное приложение для черчения
- — Vim-like веб-браузер с минималистичным интерфейсом.
Применение
PyQt — продукт, имеющий широкую пользовательскую базу. Среди коммерческих пользователей PyQt можно отметить такие известные корпорации, как Disney , Dreamworks , Pixar , Industrial Light and Magic и Sony Pictures . Всего коммерческих пользователей более 200 (по данным в 2006 году) .
См. также
Примечания
- ↑ (англ.) . Сайт Nokia . Дата обращения: 10 мая 2010. 4 марта 2012 года.
- ↑ (англ.) . Сайт PyQt. Дата обращения: 10 мая 2010. 4 марта 2012 года.
- (англ.) . Сайт PyQt. Дата обращения: 10 мая 2010. 4 марта 2012 года.
- (англ.) . Сайт Eric IDE. Дата обращения: 10 мая 2010. 4 марта 2012 года.
- (англ.) . Python Wiki. Дата обращения: 10 мая 2010. 4 марта 2012 года.
- (англ.) . Python Wiki. Дата обращения: 10 мая 2010. 4 марта 2012 года.
- (англ.) . Nokia . Дата обращения: 10 мая 2010. 4 марта 2012 года.
- (англ.) . Сайт PyQt. Дата обращения: 14 августа 2010. 4 марта 2012 года.
- ↑ (англ.) . KDE.news. Дата обращения: 13 августа 2010. 4 марта 2012 года.
- (англ.) . Сайт PyQt. Дата обращения: 10 мая 2010. 4 марта 2012 года.
- (англ.) . Сайт PySide. Дата обращения: 10 мая 2010. 4 марта 2012 года.
- ↑ Mark Summerfield. . — 1st. — Prentice Hall, 2008. — 648 p. — ISBN 978-0132354189 . 31 марта 2009 года.
- (англ.) . Сайт PyQt. Дата обращения: 10 мая 2010. 4 марта 2012 года.
- (англ.) . Сайт PyQt. Дата обращения: 10 мая 2010. 4 марта 2012 года.
- (англ.) . Сайт PyQt. Дата обращения: 2 июля 2013. 2 июля 2013 года.
- . Дата обращения: 28 мая 2020. 17 сентября 2020 года.
- . Дата обращения: 28 мая 2020. 10 мая 2020 года.
- . Дата обращения: 20 декабря 2021. 20 декабря 2021 года.
Литература
- Макс Шлее. . — СПб. : БХВ-Петербург, 2018. — С. 1072. — ISBN 978-5-9775-3678-3 .
- Прохоренок Н. А. . — СПб. : БХВ-Петербург, 2012. — С. . — ISBN 978-5-9775-0797-4 .
- Макс Шлее. . — СПб. : «БХВ-Петербург», 2012. — С. 912. — ISBN 978-5-9775-0736-3 .
- Mark Summerfield. . — 1st. — Prentice Hall , 2008. — P. 648. — ISBN 978-0132354189 .
- Boudewijn Rempt. . — OpenDocs, 2002. от 9 апреля 2010 на Wayback Machine
- Ж. Бланшет, М. Саммерфилд. Qt 4: Программирование GUI на C++. 2-е дополненное издание. — М. : КУДИЦ-ПРЕСС, 2008. — С. 736. — ISBN 978-5-91136-059-7 .
Ссылки
- (англ.)
- (англ.)
-
(англ.)
- (перевод в процессе) (рус.)
- 4 марта 2012 года. (англ.)
- (англ.)
- (англ.)
- 2020-07-29
- 1