- PyQt
-
PyQt
Qt Designer в Linux с KDEТип Привязка Qt для Python
Разработчик Riverbank Computing
Написана на C++, Python
Операционная система Первый выпуск Последняя версия 4.9.5 (29 сентября 2012)
Лицензия GPL2, GPL3 и коммерческая
Сайт 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 функций и методов, включая:
- Существующий набор виджетов графического интерфейса;
- стили виджетов;
- доступ к базам данных с помощью 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 имеет встроенный отладчик и может быть использована для создания консольных программ. Теперь она доступна в качестве отдельного проекта[4][5][6].
Содержание
Обзор основных модулей
- QtCore — основные не графические классы: система сигналов и слотов, платформонезависимые абстракции для Unicode, потоков, разделяемой памяти, регулярных выражений и т. д.
- QtGui — компоненты графического интерфейса (элементы управления), основанные на визуальном представлении.
- QtNetwork — классы для сетевого программирования. Например, клиентов и серверов через UDP и TCP.
- QtOpenGL — классы, позволяющие использовать OpenGL и 3D-графику в приложениях PyQt.
- QtScript — классы, позволяющие использовать встроенный в Qt интерпретатор JavaScript для управления приложением.
- QtSql — классы для интеграции с базами данных с помощью SQL.
- QtSvg — классы для отображения векторной графики в формате SVG.
- QtXml — классы, реализующие обработку XML.
- uic — реализация обработки XML-файлов, созданных в Qt Designer, для генерации из них Python-кода графического интерфейса[2].
Дизайнер графического интерфейса пользователя
Создание простого веб-браузера перетаскиванием виджетовQt Designer является кросс-платформенным компоновщиком макетов и форм графического интерфейса пользователя. Он позволяет быстро спроектировать виджеты и диалоги, используя экранные формы с использованием тех же виджетов, которые будут использоваться в приложении. Формы, созданные с Qt Designer, являются полностью функциональными, а также могут быть просмотрены в режиме реального времени[7].
Примеры программ
Программа Hello, world!
Стандартный минималистичный пример, дающий представление о 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 — главный файл, запускающий программу.
- 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() # даёт команду на отображение объекта формы и содержимого 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")
Результат выполнения программы в Windows XPВ этом примере довольно простая функциональность, представленная методом setLabelText. Однако при необходимости реализовать более сложную обработку поступающих данных, целесообразно вынести эту обработку в отдельный модуль (файл).
SIP
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].
- Разработка началась с создания SIP и выпуска PyQt 0.1 с поддержкой Qt 1.41 в ноябре 1998[12];
- в версии 2.0, которая вышла в 2000, реализована поддержка Qt 2.2 на Linux и Windows[12];
- поддержка Qt 3 реализована в 2001[12];
- поддержка Mac OS X реализована в 2002[12];
- выпуск PyQt4 начался с PyQt 4.0 с поддержкой Qt 4 в июне 2006[12];
- в версии 4.5, которая вышла 5 июня 2009, реализована поддержка Python 3[13];
- в версии 4.7, которая вышла 14 января 2010, реализована поддержка Qt 4.6[14].
Известные программы, использующие PyQt
- Jabbim — кроссплатформенная открытая программа мгновенного обмена сообщениями по протоколу XMPP.
- Eric IDE — интегрированная среда разработки для Python;
- Kodos — отладчик регулярных выражений Python.
- GNS3 — графический симулятор сети.
Применение
PyQt — продукт, имеющий широкую пользовательскую базу. Среди коммерческих пользователей PyQt можно отметить такие известные корпорации, как Disney, Dreamworks, Pixar, Industrial Light and Magic и Sony Pictures. Всего коммерческих пользователей более 200 (по данным в 2006 году)[9].
См. также
Примечания
- ↑ 1 2 Riverbank Computing (англ.). Сайт Nokia. Архивировано из первоисточника 4 марта 2012. Проверено 10 мая 2010.
- ↑ 1 2 What is PyQt? (англ.). Сайт PyQt. Архивировано из первоисточника 4 марта 2012. Проверено 10 мая 2010.
- ↑ PyQt Whitepaper (англ.). Сайт PyQt. Архивировано из первоисточника 4 марта 2012. Проверено 10 мая 2010.
- ↑ The Eric Python IDE (англ.). Сайт Eric IDE. Архивировано из первоисточника 4 марта 2012. Проверено 10 мая 2010.
- ↑ About PyQt (англ.). Python Wiki. Архивировано из первоисточника 4 марта 2012. Проверено 10 мая 2010.
- ↑ PyQt4 (англ.). Python Wiki. Архивировано из первоисточника 4 марта 2012. Проверено 10 мая 2010.
- ↑ GUI Designer (англ.). Nokia. Архивировано из первоисточника 4 марта 2012. Проверено 10 мая 2010.
- ↑ Introduction — SIP (англ.). Сайт PyQt. Архивировано из первоисточника 4 марта 2012. Проверено 14 августа 2010.
- ↑ 1 2 Phil Thompson Talks About PyQt (англ.). KDE.news. Архивировано из первоисточника 4 марта 2012. Проверено 13 августа 2010.
- ↑ License (англ.). Сайт PyQt. Архивировано из первоисточника 4 марта 2012. Проверено 10 мая 2010.
- ↑ PySide FAQ (англ.). Сайт PySide. Архивировано из первоисточника 4 марта 2012. Проверено 10 мая 2010.
- ↑ 1 2 3 4 5 Mark Summerfield. Rapid GUI Programming with Python and Qt. — 1st. — Prentice Hall, 2008. — 648 p. — ISBN 978-0132354189
- ↑ PyQt v4.5 Released (англ.). Сайт PyQt. Архивировано из первоисточника 4 марта 2012. Проверено 10 мая 2010.
- ↑ PyQt v4.7 Released (англ.). Сайт PyQt. Архивировано из первоисточника 4 марта 2012. Проверено 10 мая 2010.
Литература
- Прохоренок Н. А. 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.
- Ж. Бланшет, М. Саммерфилд. Qt 4: Программирование GUI на C++. 2-е дополненное издание. — М.: КУДИЦ-ПРЕСС, 2008. — С. 736. — ISBN 978-5-91136-059-7
Ссылки
Портал «Свободное программное обеспечение» PyQt на Викискладе? Проект «Свободное программное обеспечение» - Официальный сайт проекта (англ.)
- Wiki сообщества PyQt и PyKDE (англ.)
- Официальная документация по Qt (англ.)
- Неофициальная документация по Qt на русском (перевод в процессе) (рус.)
- Интервью с Филом Томпсоном — автором и разработчиком PyQt (англ.)
- Создание браузера за 2 минуты (видео) (англ.)
- Приложения, использующие PyQt (англ.)
- Примеры программ, использующих PyQt (англ.)
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
Фреймворки CherryPy • Django • Flask • GAE framework • Pylons • Pyramid • Quixote • TurboGears • Twisted • Web2py • Zope
IDE Библиотеки Другое Инструменты разработки элементов графического интерфейса Низко-
уровневыеMacintosh Toolbox/Carbon • Windows API • Intrinsics • Intuition • Xlib
Высоко-
уровневыеAmiga OS BOOPSI • Magic User Interface • Zune • ReAction GUI
Mac OS и
Mac OS XCocoa • MacApp • MacZoop • PowerPlant
Microsoft
WindowsUNIX, под X Кросс-
платфор-
менныеНа основе Flash ASWing • Adobe Flex • Gnash • SWF2EXE Software
На основе XML,
AJAX или SVGAmple SDK • CougarXML • Dojo Toolkit • Echo • ExtJS • GladeXML • Google Web Toolkit • jQuery • Lively Kernel • MooTools • Pyjamas • qooxdoo • Rialto Toolkit • script.aculo.us • XML User Interface • XUL • Yahoo! UI Library
На основе Java На основе
C или C++Agar • CEGUI • Component Library for Cross Platform • dlib C++ Library • FLTK • FOX toolkit • OpenGL User Interface Library • GTK+ • IUP • Juce • JX Application Framework • Qt • TnFOX • Visual Component Framework • wxWidgets • YAAF • XForms • XVT • Ultimate++
На основе Common Lisp CAPI • Common Graphics • CLIM • McCLIM • Garnet
На основе Pascal IP Pascal • Lazarus • fpGUI • FireMonkey
На основе Python На основе Objective C На основе других Категории:- Программное обеспечение по алфавиту
- PyQt
- Наборы привязок Qt для языков программирования
- Библиотеки Python
- Свободные библиотеки программ
- Программное обеспечение с лицензией GNU GPL
- Кроссплатформенное программное обеспечение
- Программное обеспечение для Linux
- Программное обеспечение для Mac OS X
- Программное обеспечение для Windows
- Свободное программное обеспечение, написанное на C++
- Свободное программное обеспечение, написанное на Python
- Появились в 1998 году
Wikimedia Foundation. 2010.