PyQt
| PyQt | |
|---|---|
| | |
| Qt Designer в Linux с KDE Plasma 4 | |
| Тип | Привязка Qt для Python |
| Разработчик | Riverbank Computing |
| Написана на | C++, Python |
| Операционные системы | Мультиплатформенное ПО (Windows, MacOS, Unix) |
| Дата выпуска | 1998 год |
| Последняя версия | |
| Лицензия | GPL2, GPL3 и коммерческая |
| Сайт | riverbankcomputing.com/s… |
PyQt — набор расширений (биндингов) графического фреймворка Qt для языка программирования Python, выполненный в виде расширения Python.
PyQt разработан британской компанией Riverbank Computing[2]. PyQt работает на всех платформах, поддерживаемых Qt: Linux и другие UNIX-подобные ОС, macOS и Windows. Существует 3 версии: PyQt6, PyQt5 и PyQt4, поддерживающие соответствующие версии Qt. PyQt распространяется под лицензиями GPL (2 и 3 версии) и коммерческой[3].
PyQt практически полностью реализует возможности Qt. Это более 600 классов[4], более 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 имеет встроенный отладчик и может быть использована для создания консольных программ. Теперь она доступна в качестве отдельного проекта[5][6][7].
Обзор основных модулей
- QtCore — основные не графические классы: система сигналов и слотов, платформонезависимые абстракции для Unicode, потоков, разделяемой памяти, регулярных выражений и т. д.
- QtGui — компоненты графического интерфейса (элементы управления), основанные на визуальном представлении.
- QtNetwork — классы для сетевого программирования. Например, клиентов и серверов через UDP и TCP.
- QtOpenGL — классы, позволяющие использовать OpenGL и 3D-графику в приложениях PyQt.
- QtScript — классы, позволяющие использовать встроенный в Qt интерпретатор JavaScript для управления приложением.
- QtSql — классы для интеграции с базами данных с помощью SQL.
- QtSvg — классы для отображения векторной графики в формате SVG.
- QtXml — классы, реализующие обработку XML.
- uic — реализация обработки XML-файлов, созданных в Qt Designer, для генерации из них Python-кода графического интерфейса[3].
Дизайнер графического интерфейса пользователя

Qt Designer является кроссплатформенным компоновщиком макетов и форм графического интерфейса пользователя. Он позволяет быстро спроектировать виджеты и диалоги, используя экранные формы с использованием тех же виджетов, которые будут использоваться в приложении. Формы, созданные с Qt Designer, являются полностью функциональными, а также могут быть просмотрены в режиме реального времени[8].
Примеры программ
Программа 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
SIP — это инструмент для автоматической генерации Python-привязок к C и C++ библиотекам. Первоначально SIP был разработан в 1998 году для PyQt — Python-привязки для инструментария виджетов Qt, но подходит и для создания привязок к любым другим C или C++ библиотекам[9].
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-класс[10].
Особенности лицензирования
Двойная лицензия PyQt продиктована довольно сложными отношениями в сфере применения этой надстройки (привязки) над графической библиотекой Qt. В соответствии с лицензией GPL, возможно использование библиотеки для создания программ с открытым исходным кодом. Если нет возможности распространять код в соответствии с условиями GPL, то можно приобрести коммерческую лицензию[11].
Со стороны Nokia были попытки договориться с Riverbank Computing на предмет смены лицензии, но они не увенчались успехом. В результате возник проект под названием PySide[12] — аналог PyQt, в том числе сохраняющий совместимость с последним на уровне API, но выпущенный под лицензией LGPL, чтобы дать возможность разработчикам и коммерческих проектов бесплатно использовать Python в связке с Qt.
Однако Riverbank не исключает возможности лицензирования PyQt под LGPL в будущем.
История
Riverbank Computing Limited с 1998 года разрабатывает и поддерживает PyQt, привязки, которые позволяют использовать Qt для работы с языком программирования Python[2].
- Разработка началась с создания SIP и выпуска PyQt 0.1 с поддержкой Qt 1.41 в ноябре 1998[13];
- в версии 2.0, которая вышла в 2000, реализована поддержка Qt 2.2 на Linux и Windows[13];
- поддержка Qt 3 реализована в 2001[13];
- поддержка Mac OS X реализована в 2002[13];
- выпуск PyQt4 начался с PyQt 4.0 с поддержкой Qt 4 в июне 2006[13];
- в версии 4.5, которая вышла 5 июня 2009, реализована поддержка Python 3[14];
- в версии 4.7, которая вышла 14 января 2010, реализована поддержка Qt 4.6[15];
- в версии 5.0, которая вышла 17 июня 2013, реализована поддержка Qt 5.0[16].
Известные программы, использующие PyQt
- Cura[17] — приложение нарезки 3D-модели для 3D-принтеров с открытым исходным кодом.
- Electrum — популярный свободный Bitcoin криптокошелек.
- Arduino IDE — реализация Arduino на PyQt.
- Jabbim — кроссплатформенная открытая программа мгновенного обмена сообщениями по протоколу XMPP.
- Eric IDE — интегрированная среда разработки для Python;
- GNS3 — графический симулятор сети.
- Anki — программа для облегчения запоминания слов, выражений и любой другой информации с помощью интервальных повторений.
- Calibre — приложение для управления электронными книгами
- Dropbox — файлообменник
- fman — кроссплатформенный файловый менеджер
- Kodos — отладчик регулярных выражений Python
- Leo — планировщик и редактор грамотного программирования
- Ninja-IDE — расширяемая среда разработки Python с открытым исходным кодом
- OpenLP — программа проекции текстов с открытым исходным кодом
- OpenShot — программа для редактирования видео
- Orange — структура интеллектуального анализа данных и визуализации
- Puddletag — кроссплатформенный редактор тегов ID3 с открытым исходным кодом
- QGIS — бесплатное программное обеспечение для настольных ГИС-систем
- qt-recordMyDesktop, Интерфейс Qt4 для recordMyDesktop
- Spyder — Python Data Science IDE
- TortoiseHg — графический интерфейс для программы управления источниками Mercurial (Hg)
- Veusz — научное приложение для черчения
- qutebrowser[18] — Vim-like веб-браузер с минималистичным интерфейсом.
Применение
PyQt — продукт, имеющий широкую пользовательскую базу. Среди коммерческих пользователей PyQt можно отметить такие известные корпорации, как Disney, Dreamworks, Pixar, Industrial Light and Magic и Sony Pictures. Всего коммерческих пользователей более 200 (по данным в 2006 году)[10].
См. также
Примечания
- ↑ https://riverbankcomputing.com/news/PyQt_v6.9.1_Released
- ↑ 1 2 Riverbank Computing (англ.). Сайт Nokia. Дата обращения: 10 мая 2010. Архивировано 4 марта 2012 года.
- ↑ 1 2 What is PyQt? (англ.). Сайт PyQt. Дата обращения: 10 мая 2010. Архивировано 4 марта 2012 года.
- ↑ PyQt Whitepaper (англ.). Сайт PyQt. Дата обращения: 10 мая 2010. Архивировано 4 марта 2012 года.
- ↑ The Eric Python IDE (англ.). Сайт Eric IDE. Дата обращения: 10 мая 2010. Архивировано 4 марта 2012 года.
- ↑ About PyQt (англ.). Python Wiki. Дата обращения: 10 мая 2010. Архивировано 4 марта 2012 года.
- ↑ PyQt4 (англ.). Python Wiki. Дата обращения: 10 мая 2010. Архивировано 4 марта 2012 года.
- ↑ GUI Designer (англ.). Nokia. Дата обращения: 10 мая 2010. Архивировано 4 марта 2012 года.
- ↑ Introduction — SIP (англ.). Сайт PyQt. Дата обращения: 14 августа 2010. Архивировано 4 марта 2012 года.
- ↑ 1 2 Phil Thompson Talks About PyQt (англ.). KDE.news. Дата обращения: 13 августа 2010. Архивировано 4 марта 2012 года.
- ↑ License (англ.). Сайт PyQt. Дата обращения: 10 мая 2010. Архивировано 4 марта 2012 года.
- ↑ PySide FAQ (англ.). Сайт PySide. Дата обращения: 10 мая 2010. Архивировано 4 марта 2012 года.
- ↑ 1 2 3 4 5 Mark Summerfield. Rapid GUI Programming with Python and Qt. — 1st. — Prentice Hall, 2008. — 648 p. — ISBN 978-0132354189. — [Архивировано 31 марта 2009 года.]
- ↑ PyQt v4.5 Released (англ.). Сайт PyQt. Дата обращения: 10 мая 2010. Архивировано 4 марта 2012 года.
- ↑ PyQt v4.7 Released (англ.). Сайт PyQt. Дата обращения: 10 мая 2010. Архивировано 4 марта 2012 года.
- ↑ PyQt v5.0 Released (англ.). Сайт PyQt. Дата обращения: 2 июля 2013. Архивировано 2 июля 2013 года.
- ↑ Ultimaker Cura GitHub. Дата обращения: 28 мая 2020. Архивировано 17 сентября 2020 года.
- ↑ qutebrowser. Дата обращения: 20 декабря 2021. Архивировано 20 декабря 2021 года.
Литература
- Макс Шлее. Qt 5.10 Профессиональное программирование на C++. — СПб.: БХВ-Петербург, 2018. — С. 1072. — ISBN 978-5-9775-3678-3.
- Прохоренок Н. А. Python 3 и PyQt. Разработка приложений. — СПб.: БХВ-Петербург, 2012. — С. 704. — ISBN 978-5-9775-0797-4.
- Макс Шлее. Qt 4.8 Профессиональное программирование на C++. — СПб.: «БХВ-Петербург», 2012. — С. 912. — ISBN 978-5-9775-0736-3.
- Mark Summerfield. Rapid GUI Programming with Python and Qt. — 1st. — Prentice Hall, 2008. — P. 648. — ISBN 978-0132354189.
- Boudewijn Rempt. GUI Programming with Python: QT Edition. — OpenDocs, 2002. — [Архивировано 9 апреля 2010 года.]
- Ж. Бланшет, М. Саммерфилд. Qt 4: Программирование GUI на C++. 2-е дополненное издание. — М.: КУДИЦ-ПРЕСС, 2008. — С. 736. — ISBN 978-5-91136-059-7.
Ссылки
- Официальный сайт проекта (англ.)
- Wiki сообщества PyQt и PyKDE (англ.)
- Официальная документация по Qt (англ.)
- Неофициальная документация по Qt на русском (перевод в процессе) (рус.)
- Интервью с Филом Томпсоном — автором и разработчиком PyQt Архивировано 4 марта 2012 года. (англ.)
- Приложения, использующие PyQt (англ.)
- PyQt5 Tutorial
- PyQT4 Tutorial (англ.)
Content Disclaimer
Informasi ini disarikan dari Wikipedia dan disajikan kembali untuk tujuan edukasi. Konten tersedia di bawah lisensi CC BY-SA 3.0. Kami tidak bertanggung jawab atas ketidakakuratan data yang bersumber dari kontribusi publik tersebut.
- The information displayed on this website is sourced in part or in whole from Wikipedia and has been adapted for the purpose of restating it. We strive to provide accurate and relevant information, however:
- There is no guarantee of absolute accuracy. Wikipedia is an open, collaborative project that can be edited by anyone, so information is subject to change.
- It is not intended to constitute professional advice. The content displayed is for informational and educational purposes only. For important decisions (e.g., medical, legal, or financial), please consult a professional.
- Content copyright. Wikipedia is licensed under the Creative Commons Attribution-ShareAlike License (CC BY-SA). This means that content may be reused with appropriate attribution and shared under a similar license.
- Responsible use. Any risk arising from the use of information from this website is entirely the responsibility of the user.