03-06-2023
Qt Designer в Linux с KDE |
|
Тип |
Привязка Qt для Python |
---|---|
Разработчик |
Riverbank Computing |
Написана на |
C++, Python |
Операционная система | |
Первый выпуск | |
Последняя версия |
4.9.1 (11 февраля 2012) |
Лицензия |
GPL2, GPL3 и коммерческая |
Сайт |
riverbankcomputing.com |
PyQt — набор «привязок» графического фреймворка Qt для языка программирования Python, выполненный в виде расширения Python.
PyQt разработан британской компанией Riverbank Computing[1]. PyQt работает на всех платформах, поддерживаемых Qt: Linux и другие UNIX-подобные ОС, Mac OS X и Windows. Существует 2 варианта: PyQt4, поддерживающий Qt 4, и устаревший PyQt3, поддерживающий Qt 3 и более ранние версии. PyQt распространяется под лицензиями GPL (2 и 3 версии) и коммерческой[2].
PyQt практически полностью реализует возможности Qt. А это более 600 классов[3], более 6000 функций и методов, включая:
PyQt также включает в себя Qt Designer (Qt Creator) — дизайнер графического интерфейса пользователя. Программа pyuic генерирует Python код из файлов, созданных в Qt Designer. Это делает PyQt очень полезным инструментом для быстрого прототипирования. Кроме того, можно добавлять новые графические элементы управления, написанные на Python, в Qt Designer.
Раньше PyQt поставлялся вместе со средой разработки Eric, написанной на PyQt. Eric имеет встроенный отладчик и может быть использована для создания консольных программ. Теперь она доступна в качестве отдельного проекта[4][5][6].
Содержание |
Qt Designer является кросс-платформенным компоновщиком макетов и форм графического интерфейса пользователя. Он позволяет быстро спроектировать виджеты и диалоги, используя экранные формы с использованием тех же виджетов, которые будут использоваться в приложении. Формы, созданные с Qt Designer, являются полностью функциональными, а также могут быть просмотрены в режиме реального времени[7].
Стандартный минималистичный пример, дающий представление о PyQt. Программа показывает пустое окно, обладающее базовыми функциями — изменение размера, сворачивание, разворачивание:
#! /usr/bin/env python # -*- 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_()) # запуск основного цикла приложения |
Результат выполнения программы в Linux с KDE
|
В этом примере показаны принципы создания более серьёзных программ. Используется Python 3 и Qt Designer. Применяется объектно-ориентированный подход, позволяющий разделить визуальное представление и логику программы.
Состав программы:
Содержание файла 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() # даёт команду на отображение объекта формы и содержимого 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++ библиотекам[8].
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-класс[9].
Двойная лицензия PyQt продиктована довольно сложными отношениями в сфере применения этой надстройки (привязки) над графической библиотекой Qt. В соответствии с лицензией GPL, возможно использование библиотеки для создания программ с открытым исходным кодом. Если нет возможности распространять код в соответствии с условиями GPL, то можно приобрести коммерческую лицензию[10].
Со стороны Nokia были попытки договориться с Riverbank Computing на предмет смены лицензии, но они не увенчались успехом. В результате возник проект под названием PySide[11] — аналог PyQt, в том числе сохраняющий совместимость с последним на уровне API, но выпущенный под лицензией LGPL, чтобы дать возможность разработчикам и коммерческих проектов бесплатно использовать Python в связке с Qt.
Однако Riverbank не исключает возможности лицензирования PyQt под LGPL в будущем.
Riverbank Computing Limited с 1998 года разрабатывает и поддерживает PyQt, привязки, которые позволяют использовать Qt для работы с языком программирования Python[1].
PyQt — продукт, имеющий широкую пользовательскую базу. Среди коммерческих пользователей PyQt можно отметить такие известные корпорации, как Disney, Dreamworks, Pixar, Industrial Light and Magic и Sony Pictures. Всего коммерческих пользователей более 200 (по данным в 2006 году)[9].
Портал «Свободное программное обеспечение» | |
Проект «Свободное программное обеспечение» |
Qt | |
---|---|
Технологии | Meta-object System · Phonon · QML · QtScript · Qt Quick · Qt Style Sheets · Сигналы и слоты |
Инструменты | qmake · Qt Creator · Метаобъектный компилятор |
Привязки | PyQt · PySide · QtRuby · Qt Jambi |
Связанные темы | KDE · MeeGo · Qt Development Frameworks |
Python | |
---|---|
Люди | Гвидо ван Россум |
Реализации |
ChinesePython • CLPython • CPython • JPype • Jython • IronPython • PyPy • Python for S60 • Psyco • Stackless Python • Unladen Swallow |
Фреймворки | |
IDE |
Boa Constructor • Eclipse+PyDev • Eric • Geany • IDLE • Komodo • NetBeans • PyCharm • PyScripter • SPE |
Библиотеки |
Beautiful Soup • NLTK • NumPy • PIL • Pygame • PyGTK • Pyparsing • PyQt • SciPy • SQLAlchemy |
Другое |
Свободное и открытое программное обеспечение | |
---|---|
Главное | |
История |
GNU • Linux • Mozilla (Application Suite • Firefox • Thunderbird) |
Организации |
ASF • AOSP • Blender Foundation • Eclipse Foundation • FreeBSD Foundation • freedesktop.org • FSF • FSMI • GNOME Foundation • Проект GNU • Google Code • KDE e.V. • Linux Foundation • Mozilla Foundation • OSGF • OSI • ReactOS Foundation • Software Freedom Conservancy • SourceForge • Symbian Foundation • The Document Foundation • Xiph.Org • XMPP Standards Foundation • X.Org Foundation |
Лицензии |
Apache • Artistic • Beerware • BSD • GNU GPL • GNU LGPL • ISC • MIT • MPL • Ms-PL/RL • zlib • Public domain / CC0 • WTFPL • Лицензии, одобренные FSF • Пермиссивные лицензии • Разнообразие лицензий |
Проблемы | |
Прочее |
Инструменты разработки элементов графического интерфейса | |||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
уровневые |
|||||||||||||||||||||||||||||
уровневые |
|
PyQt.