Вики-текст старой страницы до правки ($1) (old_wikitext) | '{{Карточка программы
| name = PyQt
| logo = [[Файл:Python and Qt.svg|Python и Qt|160px]]
| screenshot = [[Файл:Qt Designer (rus).png|Qt Designer|280px]]
| caption = Qt Designer в Linux с [[KDE]]
| developer = Riverbank Computing
| genre = Привязка Qt для Python
| language =
| platform =
| operating_system = [[Кроссплатформенное программное обеспечение|Кроссплатформенное]]
| programming_language = [[C++]], Python{{нет АИ|7|08|2010}}<!--<ref name="осн.source" /><ref name="вики.cpp" /><ref name="вики.py" /> — подсчёт файлов с каким-то расширением не доказывает, на чём написана программа // AVB -->
| latest_release_version = 4.9.1
| latest_release_date = [[11 февраля]] [[2012]]
| latest_preview_version =
| latest_preview_date =
| released = [[1998 год]]
| license = [[GPL2]], [[GPL3]] и [[Проприетарное программное обеспечение|коммерческая]]
| website = [http://www.riverbankcomputing.com/software/pyqt/intro riverbankcomputing.com]
}}
'''PyQt''' — набор «[[Привязка (программирование)|привязок]]» [[графический интерфейс пользователя|графического]] [[фреймворк]]а [[Qt]] для [[Язык программирования|языка программирования]] [[Python]], выполненный в виде [[Плагин|расширения]] Python.
PyQt разработан [[Великобритания|британской]] компанией Riverbank Computing<ref name="nokia.rb" />. PyQt работает на всех платформах, поддерживаемых Qt: [[Linux]] и другие [[Unix-подобная операционная система|UNIX-подобные ОС]], [[Mac OS X]] и [[Windows]]. Существует 2 варианта: PyQt4, поддерживающий Qt 4 и устаревший PyQt3, поддерживающий Qt 3 и более ранние версии. PyQt распространяется под лицензиями [[GPL]] (2 и 3 версии) и [[Проприетарное программное обеспечение|коммерческой]]<ref name="осн" />.
PyQt практически полностью реализует возможности Qt. А это более 600 классов<ref name="осн.опис" />, более 6000 функций и методов, включая:
* Существующий набор [[виджет]]ов графического интерфейса;
* стили виджетов;
* доступ к [[База данных|базам данных]] с помощью [[SQL]] ([[ODBC]], [[MySQL]], [[PostgreSQL]], [[Oracle (СУБД)|Oracle]]);
* QScintilla, основанный на [[Scintilla]] виджет текстового редактора;
* поддержку [[интернационализация|интернационализации]] (i18n);
* [[парсер]] [[XML]];
* поддержку [[SVG]];
* интеграцию с [[WebKit]], движком рендеринга HTML;
* поддержку воспроизведения видео и аудио.
PyQt также включает в себя [[Qt Designer]] ([[Qt Creator]]) — дизайнер графического интерфейса пользователя. Программа pyuic генерирует Python код из файлов, созданных в Qt Designer. Это делает PyQt очень полезным инструментом для быстрого прототипирования. Кроме того, можно добавлять новые графические элементы управления, написанные на Python, в Qt Designer.
Раньше PyQt поставлялся вместе со [[Интегрированная среда разработки|средой разработки]] [[Eric Python IDE|Eric]], написанной на PyQt. Eric имеет встроенный отладчик и может быть использована для создания консольных программ. Теперь она доступна в качестве отдельного проекта<ref name="eric" /><ref name="py.pyqt" /><ref name="py.pyqt4" />.
== Обзор основных модулей ==
* ''QtCore'' — основные не графические классы: система сигналов и слотов, платформонезависимые абстракции для [[Unicode]], потоков, разделяемой памяти, [[Регулярные выражения|регулярных выражений]] и т. д.
* ''QtGui'' — компоненты [[Графический интерфейс пользователя|графического интерфейса]] (элементы управления), основанные на визуальном представлении.
* ''QtNetwork'' — классы для сетевого программирования. Например, клиентов и серверов через [[UDP]] и [[TCP]].
* ''QtOpenGL'' — классы, позволяющие использовать [[OpenGL]] и 3D-графику в приложениях PyQt.
* ''QtScript'' — классы, позволяющие использовать встроенный в Qt интерпретатор [[JavaScript]] для управления приложением.
* ''QtSql'' — классы для интеграции с базами данных с помощью SQL.
* ''QtSvg'' — классы для отображения векторной графики в формате [[SVG]].
* ''QtXml'' — классы, реализующие обработку XML.
* ''uic'' — реализация обработки XML-файлов, созданных в Qt Designer, для генерации из них Python-кода графического интерфейса<ref name="осн"/>.
== Дизайнер графического интерфейса пользователя ==
[[Файл:Screenshot-qt-designer-qwebview.png|thumb|300px|Создание простого [[веб-браузер]]а перетаскиванием виджетов]]
{{main|Qt Designer}}
Qt Designer является кросс-платформенным компоновщиком макетов и форм графического интерфейса пользователя. Он позволяет быстро спроектировать виджеты и диалоги, используя экранные формы с использованием тех же виджетов, которые будут использоваться в приложении. Формы, созданные с Qt Designer, являются полностью функциональными, а также могут быть просмотрены в режиме реального времени.<ref name="nokia.designer" />.
== Примеры программ ==
=== Программа [[Hello, world!]] ===
Стандартный минималистичный пример, дающий представление о PyQt. Программа показывает пустое окно, обладающее базовыми функциями — изменение размера, сворачивание, разворачивание:
{| style="border-collapse:collapse; background:transparent"
|<source lang="python">
#! /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_()) # запуск основного цикла приложения
</source>
|[[Файл:PyQt screen.png|frame|Результат выполнения программы в Linux с KDE]]
|}
=== Более сложный пример ===
В этом примере показаны принципы создания более серьёзных программ. Используется Python 3 и Qt Designer. Применяется объектно-ориентированный подход, позволяющий разделить визуальное представление и логику программы.
Состав программы:
* ''test.pyw'' — главный файл, запускающий программу.
* ''mainform.py'' — файл описания главного окна.
* ''mainform.ui'' — файл, содержащий автоматически сгенерированное при помощи Qt Designer описание главного окна. В программе Qt Designer был создан проект, основанный на ''QDialog'' и выбраны 2 элемента: кнопка с именем ''pushButton'', текстовая метка с именем ''label''.
Содержание файла ''test.pyw'':
<source lang="python">#! /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())</source>
Содержание файла ''mainform.py'':
<source lang="python">#! /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")</source>
[[Файл:PyQt screen2.png|frame|Результат выполнения программы в Windows XP]]
В этом примере довольно простая функциональность, представленная методом ''setLabelText''. Однако при необходимости реализовать более сложную обработку поступающих данных, целесообразно вынести эту обработку в отдельный модуль (файл).
== SIP ==
[[SIP (инструмент PyQt)|SIP]] — это инструмент для автоматической генерации Python-привязок к C и C++ библиотекам. Первоначально SIP был разработан в 1998 году для PyQt — Python-привязки для инструментария виджетов Qt, но подходит и для создания привязок к любым другим C или C++ библиотекам<ref name="sip.introduction" />.
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-класс<ref name="интервью" />.
== Особенности лицензирования ==
Двойная [[Лицензия на программное обеспечение|лицензия]] PyQt продиктована довольно сложными отношениями в сфере применения этой надстройки (привязки) над графической библиотекой Qt. В соответствии с лицензией [[GPL]], возможно использование библиотеки для создания программ с [[Открытый исходный код|открытым исходным кодом]]. Если нет возможности распространять код в соответствии с условиями GPL, то можно приобрести коммерческую лицензию<ref name="осн.лиц" />.
Со стороны [[Nokia]] были попытки договориться с Riverbank Computing на предмет смены лицензии, но они не увенчались успехом. В результате возник проект под названием [[PySide]]<ref name="pyside.faq" /> — аналог PyQt, в том числе сохраняющий совместимость с последним на уровне API, но выпущенный под лицензией [[LGPL]], чтобы дать возможность разработчикам и коммерческих проектов бесплатно использовать Python в связке с Qt.
Однако Riverbank не исключает возможности лицензирования PyQt под LGPL в будущем.
== История ==
Riverbank Computing Limited с 1998 года разрабатывает и поддерживает PyQt, привязки, которые позволяют использовать Qt для работы с языком программирования Python<ref name="nokia.rb" />.
* Разработка началась с создания SIP и выпуска PyQt 0.1 с поддержкой Qt 1.41 в ноябре 1998<ref name="книга.rapid_gui"/>;
* в версии 2.0, которая вышла в 2000, реализована поддержка Qt 2.2 на Linux и Windows<ref name="книга.rapid_gui"/>;
* поддержка Qt 3 реализована в 2001<ref name="книга.rapid_gui"/>;
* поддержка [[Mac OS X]] реализована в 2002<ref name="книга.rapid_gui"/>;
* выпуск PyQt4 начался с PyQt 4.0 с поддержкой Qt 4 в июне 2006<ref name="книга.rapid_gui"/>;
* в версии 4.5, которая вышла 5 июня 2009, реализована поддержка Python 3<ref name="осн.45" />;
* в версии 4.7, которая вышла 14 января 2010, реализована поддержка Qt 4.6<ref name="осн.47" />.
== Известные программы, использующие PyQt ==
* [[Jabbim]] — кроссплатформенная открытая [[программа мгновенного обмена сообщениями]] по протоколу [[XMPP]].
* [[Eric Python IDE|Eric IDE]] — [[интегрированная среда разработки]] для Python;
* [[Kodos]] — отладчик [[Регулярные выражения|регулярных выражений]] Python.
* [[GNS3]] — графический симулятор сети.
== Применение ==
PyQt — продукт, имеющий широкую пользовательскую базу. Среди коммерческих пользователей PyQt можно отметить такие известные корпорации, как [[Disney]], [[Dreamworks]], [[Pixar]], [[Industrial Light and Magic]] и [[Sony Pictures]]. Всего коммерческих пользователей более 200 (по данным в 2006 году)<ref name="интервью" />.
== См. также ==
* [[PyGTK]]
* [[PythonQt]]
* [[Tkinter]]
== Примечания ==
{{примечания|refs=
<!--
<ref name="осн.source">{{cite web|url=http://www.riverbankcomputing.com/static/Downloads/PyQt4/PyQt-win-gpl-4.7.3.zip|title=PyQt4 source|publisher=Сайт PyQt|date=|accessdate=10 мая 2010|lang=en|deadlink=404}}</ref>
-->
<ref name="nokia.rb">{{cite web|url=http://qt.nokia.com/services-partners/partners/partner-directory/riverbank-computing|title=Riverbank Computing|lang=en|publisher=Сайт [[Nokia]]|accessdate=10 мая 2010|archiveurl=http://www.webcitation.org/65uI4015X|archivedate=2012-03-04}}</ref>
<ref name="осн">{{cite web|url=http://www.riverbankcomputing.com/software/pyqt/intro|title=What is PyQt?|lang=en|publisher=Сайт PyQt|accessdate=10 мая 2010|archiveurl=http://www.webcitation.org/65uI5zkoZ|archivedate=2012-03-04}}</ref>
<ref name="осн.опис">{{cite web|url=http://www.riverbankcomputing.com/static/Docs/PyQt4/pyqt-whitepaper-a4.pdf|title=PyQt Whitepaper|lang=en|publisher=Сайт PyQt|accessdate=10 мая 2010|archiveurl=http://www.webcitation.org/65uI7uSIF|archivedate=2012-03-04}}</ref>
<!--
<ref name="вики.cpp">Файлы с расширением [[.cpp]]</ref>
-->
<ref name="eric">{{cite web|url=http://eric-ide.python-projects.org/|title=The Eric Python IDE|lang=en|publisher=Сайт Eric IDE|accessdate=10 мая 2010|archiveurl=http://www.webcitation.org/65uI9JyVD|archivedate=2012-03-04}}</ref>
<!--
<ref name="вики.py">Файлы с расширением [[Python|.py]]</ref>
-->
<ref name="py.pyqt">{{cite web|url=http://wiki.python.org/moin/PyQt|title=About PyQt|lang=en|publisher=Python Wiki|accessdate=10 мая 2010|archiveurl=http://www.webcitation.org/65uICUwfJ|archivedate=2012-03-04}}</ref>
<ref name="py.pyqt4">{{cite web|url=http://wiki.python.org/moin/PyQt4|title=PyQt4|lang=en|publisher=Python Wiki|accessdate=10 мая 2010|archiveurl=http://www.webcitation.org/65uMnGmU9|archivedate=2012-03-04}}</ref>
<ref name="nokia.designer">{{cite web|url=http://qt.nokia.com/products/developer-tools/developer-tools?currentflipperobject=937ba3e952f85ef68ddbb7cb4b20fc19|title=GUI Designer|lang=en|publisher=[[Nokia]]|accessdate=10 мая 2010|archiveurl=http://www.webcitation.org/65uMnrm5n|archivedate=2012-03-04}}</ref>
<ref name="sip.introduction">{{cite web|url=http://www.riverbankcomputing.com/static/Docs/sip4/introduction.html|title=Introduction — SIP|publisher=Сайт PyQt|date=|accessdate=14 августа 2010|lang=en|archiveurl=http://www.webcitation.org/65uMosJoa|archivedate=2012-03-04}}</ref>
<ref name="интервью">{{cite web|url=http://dot.kde.org/2006/08/08/phil-thompson-talks-about-pyqt|title=Phil Thompson Talks About PyQt|publisher=KDE.news|date=|accessdate=13 августа 2010|lang=en|archiveurl=http://www.webcitation.org/65uMpLuHw|archivedate=2012-03-04}}</ref>
<ref name="осн.лиц">{{cite web|url=http://www.riverbankcomputing.co.uk/software/pyqt/license|title=License|lang=en|publisher=Сайт PyQt|accessdate=10 мая 2010|archiveurl=http://www.webcitation.org/65uMpzkQx|archivedate=2012-03-04}}</ref>
<ref name="pyside.faq">{{cite web|url=http://www.pyside.org/faq/|title=PySide FAQ|lang=en|publisher=Сайт PySide|accessdate=10 мая 2010|archiveurl=http://www.webcitation.org/65uMrB1Sw|archivedate=2012-03-04}}</ref>
<ref name="книга.rapid_gui">{{книга|автор=Mark Summerfield.|заглавие=Rapid GUI Programming with Python and Qt|ссылка=http://www.qtrac.eu/pyqtbook.html|издание=1st|издательство=Prentice Hall|год=2008|allpages=648|isbn=978-0132354189}}</ref>
<ref name="осн.45">{{cite web|url=http://www.riverbankcomputing.com/news/pyqt-45|title=PyQt v4.5 Released|publisher=Сайт PyQt|date=|accessdate=10 мая 2010|lang=en|archiveurl=http://www.webcitation.org/65uMsmDDY|archivedate=2012-03-04}}</ref>
<ref name="осн.47">{{cite web|url=http://www.riverbankcomputing.com/news/pyqt-47|title=PyQt v4.7 Released|publisher=Сайт PyQt|date=|accessdate=10 мая 2010|lang=en|archiveurl=http://www.webcitation.org/65uMtxbn4|archivedate=2012-03-04}}</ref>
}}
== Литература ==
* {{книга
|автор = Mark Summerfield.
|заглавие = Rapid GUI Programming with Python and Qt
|ссылка = http://www.qtrac.eu/pyqtbook.html
|издание = 1st
|издательство = [[Prentice Hall]]
|год = 2008
|pages = 648
|isbn = 978-0132354189
}}
* {{книга
|автор = Boudewijn Rempt.
|заглавие = GUI Programming with Python: QT Edition
|ссылка = http://www.commandprompt.com/community/pyqt/
|издательство = OpenDocs
|год = 2002
}}
* {{книга
|заглавие = Qt 4: Программирование GUI на C++. 2-е дополненное издание
|автор = Ж. Бланшет, М. Саммерфилд.
|isbn = 978-5-91136-059-7
|страницы = 736
|год = 2008
|место = М.
|издательство = КУДИЦ-ПРЕСС
}}
* {{книга
|заглавие = Qt 4.5 Профессиональное программирование на C++
|автор = Макс Шлее.
|isbn = 978-5-9775-0398-3
|страницы = 896
|год = 2010
|место = СПб.
|издательство = БХВ-Петербург
}}
== Ссылки ==
{{Чистить ссылки}}
{{Навигация
|Тема = PyQt
|Портал = Свободное программное обеспечение
|Викисловарь =
|Викиверситет =
|Викиучебник =
|Викицитатник =
|Викитека =
|Викивиды =
|Викиновости =
|Викисклад = Category:PyQt
|Метавики =
|Проект = Свободное программное обеспечение
}}
* [http://www.riverbankcomputing.com/software/pyqt/intro Официальный сайт проекта] {{ref-en}}
* [http://diotavelli.net/PyQtWiki Wiki сообщества PyQt и PyKDE] {{ref-en}}
* [http://doc.qt.nokia.com/ Официальная документация по Qt] {{ref-en}}
** [http://doc.crossplatform.ru Неофициальная документация по Qt на русском] (перевод в процессе) {{ref-ru}}
* [http://dot.kde.org/2006/08/08/phil-thompson-talks-about-pyqt Интервью с Филом Томпсоном — автором и разработчиком PyQt] {{ref-en}}
=== Статьи ===
* PyQt4 — Введение (часть [http://habrahabr.ru/blogs/python/31684/ 1], [http://habrahabr.ru/blogs/python/31685/ 2], [http://habrahabr.ru/blogs/python/31687/ 3], [http://habrahabr.ru/blogs/python/31690/ 4], [http://habrahabr.ru/blogs/python/52457/ 5]) {{ref-ru}}
* Программирование на PyQt4 (часть [http://habrahabr.ru/blogs/qt_software/44692/ 1], [http://habrahabr.ru/blogs/qt_software/44712/ 2], [http://habrahabr.ru/blogs/qt_software/45299/ 3]) {{ref-ru}}
* Разговариваем про PyQt4 (часть [http://habrahabr.ru/blogs/python/75226/ 1], [http://habrahabr.ru/blogs/python/75323/ 2]) {{ref-ru}}
* [http://www.rkblog.rk.edu.pl/w/p/introduction-pyqt4/ Мини-уроки] {{ref-en}}
* [http://zetcode.com/tutorials/pyqt4/ Мини-уроки] {{ref-en}}
* [http://asakasinsky.blogspot.com/2011/06/pyqt4.html Тестовое приложение на PyQt4] {{ref-ru}}
=== Прочее ===
* [http://www.youtube.com/watch?v=Ee8eRwjbcFk Создание браузера за 2 минуты (видео)] {{ref-en}}
* [http://wiki.python.org/moin/PyQt#PyQtapplications Приложения, использующие PyQt] {{ref-en}}
* [http://www.diotavelli.net/PyQtWiki/SomeExistingApplications Примеры программ, использующих PyQt] {{ref-en}}
{{Qt}}
{{FOSS}}
{{Инструментарии виджетов}}
[[Категория:PyQt| ]]
[[Категория:Наборы привязок Qt для языков программирования]]
[[Категория:Библиотеки Python]]
[[Категория:Свободные библиотеки программ]]
[[Категория:Программное обеспечение с лицензией GNU GPL]]
[[Категория:Кроссплатформенное программное обеспечение]]
[[Категория:Программное обеспечение для Linux]]
[[Категория:Программное обеспечение для Mac OS X]]
[[Категория:Программное обеспечение для Windows]]
[[Категория:Свободное программное обеспечение, написанное на C++]]
[[Категория:Свободное программное обеспечение, написанное на Python]]
[[Категория:Статьи с примерами кода Python]]
[[Категория:Появились в 1998 году]]
[[ar:باي كيوت]]
[[cs:PyQt]]
[[en:PyQt]]
[[es:PyQt]]
[[fa:پایکیوت]]
[[fr:PyQt]]
[[pl:PyQt]]
[[pt:PyQT]]
[[zh:PyQt]]' |
Вики-текст новой страницы после правки ($1) (new_wikitext) | '{{Карточка программы
| name = PyQt
| logo = [[Файл:Python and Qt.svg|Python и Qt|160px]]
| screenshot = [[Файл:Qt Designer (rus).png|Qt Designer|280px]]
| caption = Qt Designer в Linux с [[KDE]]
| developer = Riverbank Computing
| genre = Привязка Qt для Python
| language =
| platform =
| operating_system = [[Кроссплатформенное программное обеспечение|Кроссплатформенное]]
| programming_language = [[C++]], Python{{нет АИ|7|08|2010}}<!--<ref name="осн.source" /><ref name="вики.cpp" /><ref name="вики.py" /> — подсчёт файлов с каким-то расширением не доказывает, на чём написана программа // AVB -->
| latest_release_version = 4.9.1
| latest_release_date = [[11 февраля]] [[2012]]
| latest_preview_version =
| latest_preview_date =
| released = [[1998 год]]
| license = [[GPL2]], [[GPL3]] и [[Проприетарное программное обеспечение|коммерческая]]
| website = [http://www.riverbankcomputing.com/software/pyqt/intro riverbankcomputing.com]
}}
'''PyQt''' — набор «[[Привязка (программирование)|привязок]]» [[графический интерфейс пользователя|графического]] [[фреймворк]]а [[Qt]] для [[Язык программирования|языка программирования]] [[Python]], выполненный в виде [[Плагин|расширения]] Python.
PyQt разработан [[Великобритания|британской]] компанией Riverbank Computing<ref name="nokia.rb" />. PyQt работает на всех платформах, поддерживаемых Qt: [[Linux]] и другие [[Unix-подобная операционная система|UNIX-подобные ОС]], [[Mac OS X]] и [[Windows]]. Существует 2 варианта: PyQt4, поддерживающий Qt 4 и устаревший PyQt3, поддерживающий Qt 3 и более ранние версии. PyQt распространяется под лицензиями [[GPL]] (2 и 3 версии) и [[Проприетарное программное обеспечение|коммерческой]]<ref name="осн" />.
PyQt практически полностью реализует возможности Qt. А это более 600 классов<ref name="осн.опис" />, более 6000 функций и методов, включая:
* Существующий набор [[виджет]]ов графического интерфейса;
* стили виджетов;
* доступ к [[База данных|базам данных]] с помощью [[SQL]] ([[ODBC]], [[MySQL]], [[PostgreSQL]], [[Oracle (СУБД)|Oracle]]);
* QScintilla, основанный на [[Scintilla]] виджет текстового редактора;
* поддержку [[интернационализация|интернационализации]] (i18n);
* [[парсер]] [[XML]];
* поддержку [[SVG]];
* интеграцию с [[WebKit]], движком рендеринга HTML;
* поддержку воспроизведения видео и аудио.
PyQt также включает в себя [[Qt Designer]] ([[Qt Creator]]) — дизайнер графического интерфейса пользователя. Программа pyuic генерирует Python код из файлов, созданных в Qt Designer. Это делает PyQt очень полезным инструментом для быстрого прототипирования. Кроме того, можно добавлять новые графические элементы управления, написанные на Python, в Qt Designer.
Раньше PyQt поставлялся вместе со [[Интегрированная среда разработки|средой разработки]] [[Eric Python IDE|Eric]], написанной на PyQt. Eric имеет встроенный отладчик и может быть использована для создания консольных программ. Теперь она доступна в качестве отдельного проекта<ref name="eric" /><ref name="py.pyqt" /><ref name="py.pyqt4" />.
== Обзор основных модулей ==
* ''QtCore'' — основные не графические классы: система сигналов и слотов, платформонезависимые абстракции для [[Unicode]], потоков, разделяемой памяти, [[Регулярные выражения|регулярных выражений]] и т. д.
* ''QtGui'' — компоненты [[Графический интерфейс пользователя|графического интерфейса]] (элементы управления), основанные на визуальном представлении.
* ''QtNetwork'' — классы для сетевого программирования. Например, клиентов и серверов через [[UDP]] и [[TCP]].
* ''QtOpenGL'' — классы, позволяющие использовать [[OpenGL]] и 3D-графику в приложениях PyQt.
* ''QtScript'' — классы, позволяющие использовать встроенный в Qt интерпретатор [[JavaScript]] для управления приложением.
* ''QtSql'' — классы для интеграции с базами данных с помощью SQL.
* ''QtSvg'' — классы для отображения векторной графики в формате [[SVG]].
* ''QtXml'' — классы, реализующие обработку XML.
* ''uic'' — реализация обработки XML-файлов, созданных в Qt Designer, для генерации из них Python-кода графического интерфейса<ref name="осн"/>.
== Дизайнер графического интерфейса пользователя ==
[[Файл:Screenshot-qt-designer-qwebview.png|thumb|300px|Создание простого [[веб-браузер]]а перетаскиванием виджетов]]
{{main|Qt Designer}}
Qt Designer является кросс-платформенным компоновщиком макетов и форм графического интерфейса пользователя. Он позволяет быстро спроектировать виджеты и диалоги, используя экранные формы с использованием тех же виджетов, которые будут использоваться в приложении. Формы, созданные с Qt Designer, являются полностью функциональными, а также могут быть просмотрены в режиме реального времени.<ref name="nokia.designer" />.
== Примеры программ ==
=== Программа [[Hello, world!]] ===
Стандартный минималистичный пример, дающий представление о PyQt. Программа показывает пустое окно, обладающее базовыми функциями — изменение размера, сворачивание, разворачивание:
{| style="border-collapse:collapse; background:transparent"
|<source lang="python">
#! /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_()) # запуск основного цикла приложения
</source>
|[[Файл:PyQt screen.png|frame|Результат выполнения программы в Linux с KDE]]
|}
=== Более сложный пример ===
В этом примере показаны принципы создания более серьёзных программ. Используется Python 3 и Qt Designer. Применяется объектно-ориентированный подход, позволяющий разделить визуальное представление и логику программы.
Состав программы:
* ''test.pyw'' — главный файл, запускающий программу.
* ''mainform.py'' — файл описания главного окна.
* ''mainform.ui'' — файл, содержащий автоматически сгенерированное при помощи Qt Designer описание главного окна. В программе Qt Designer был создан проект, основанный на ''QDialog'' и выбраны 2 элемента: кнопка с именем ''pushButton'', текстовая метка с именем ''label''.
Содержание файла ''test.pyw'':
<source lang="python">#! /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())</source>
Содержание файла ''mainform.py'':
<source lang="python">#! /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")</source>
[[Файл:PyQt screen2.png|frame|Результат выполнения программы в Windows XP]]
В этом примере довольно простая функциональность, представленная методом ''setLabelText''. Однако при необходимости реализовать более сложную обработку поступающих данных, целесообразно вынести эту обработку в отдельный модуль (файл).
== SIP ==
[[SIP (инструмент PyQt)|SIP]] — это инструмент для автоматической генерации Python-привязок к C и C++ библиотекам. Первоначально SIP был разработан в 1998 году для PyQt — Python-привязки для инструментария виджетов Qt, но подходит и для создания привязок к любым другим C или C++ библиотекам<ref name="sip.introduction" />.
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-класс<ref name="интервью" />.
== Особенности лицензирования ==
Двойная [[Лицензия на программное обеспечение|лицензия]] PyQt продиктована довольно сложными отношениями в сфере применения этой надстройки (привязки) над графической библиотекой Qt. В соответствии с лицензией [[GPL]], возможно использование библиотеки для создания программ с [[Открытый исходный код|открытым исходным кодом]]. Если нет возможности распространять код в соответствии с условиями GPL, то можно приобрести коммерческую лицензию<ref name="осн.лиц" />.
Со стороны [[Nokia]] были попытки договориться с Riverbank Computing на предмет смены лицензии, но они не увенчались успехом. В результате возник проект под названием [[PySide]]<ref name="pyside.faq" /> — аналог PyQt, в том числе сохраняющий совместимость с последним на уровне API, но выпущенный под лицензией [[LGPL]], чтобы дать возможность разработчикам и коммерческих проектов бесплатно использовать Python в связке с Qt.
Однако Riverbank не исключает возможности лицензирования PyQt под LGPL в будущем.
== История ==
Riverbank Computing Limited с 1998 года разрабатывает и поддерживает PyQt, привязки, которые позволяют использовать Qt для работы с языком программирования Python<ref name="nokia.rb" />.
* Разработка началась с создания SIP и выпуска PyQt 0.1 с поддержкой Qt 1.41 в ноябре 1998<ref name="книга.rapid_gui"/>;
* в версии 2.0, которая вышла в 2000, реализована поддержка Qt 2.2 на Linux и Windows<ref name="книга.rapid_gui"/>;
* поддержка Qt 3 реализована в 2001<ref name="книга.rapid_gui"/>;
* поддержка [[Mac OS X]] реализована в 2002<ref name="книга.rapid_gui"/>;
* выпуск PyQt4 начался с PyQt 4.0 с поддержкой Qt 4 в июне 2006<ref name="книга.rapid_gui"/>;
* в версии 4.5, которая вышла 5 июня 2009, реализована поддержка Python 3<ref name="осн.45" />;
* в версии 4.7, которая вышла 14 января 2010, реализована поддержка Qt 4.6<ref name="осн.47" />.
== Известные программы, использующие PyQt ==
* [[Jabbim]] — кроссплатформенная открытая [[программа мгновенного обмена сообщениями]] по протоколу [[XMPP]].
* [[Eric Python IDE|Eric IDE]] — [[интегрированная среда разработки]] для Python;
* [[Kodos]] — отладчик [[Регулярные выражения|регулярных выражений]] Python.
* [[GNS3]] — графический симулятор сети.
== Применение ==
PyQt — продукт, имеющий широкую пользовательскую базу. Среди коммерческих пользователей PyQt можно отметить такие известные корпорации, как [[Disney]], [[Dreamworks]], [[Pixar]], [[Industrial Light and Magic]] и [[Sony Pictures]]. Всего коммерческих пользователей более 200 (по данным в 2006 году)<ref name="интервью" />.
== См. также ==
* [[PyGTK]]
* [[PythonQt]]
* [[Tkinter]]
== Примечания ==
{{примечания|refs=
<!--
<ref name="осн.source">{{cite web|url=http://www.riverbankcomputing.com/static/Downloads/PyQt4/PyQt-win-gpl-4.7.3.zip|title=PyQt4 source|publisher=Сайт PyQt|date=|accessdate=10 мая 2010|lang=en|deadlink=404}}</ref>
-->
<ref name="nokia.rb">{{cite web|url=http://qt.nokia.com/services-partners/partners/partner-directory/riverbank-computing|title=Riverbank Computing|lang=en|publisher=Сайт [[Nokia]]|accessdate=10 мая 2010|archiveurl=http://www.webcitation.org/65uI4015X|archivedate=2012-03-04}}</ref>
<ref name="осн">{{cite web|url=http://www.riverbankcomputing.com/software/pyqt/intro|title=What is PyQt?|lang=en|publisher=Сайт PyQt|accessdate=10 мая 2010|archiveurl=http://www.webcitation.org/65uI5zkoZ|archivedate=2012-03-04}}</ref>
<ref name="осн.опис">{{cite web|url=http://www.riverbankcomputing.com/static/Docs/PyQt4/pyqt-whitepaper-a4.pdf|title=PyQt Whitepaper|lang=en|publisher=Сайт PyQt|accessdate=10 мая 2010|archiveurl=http://www.webcitation.org/65uI7uSIF|archivedate=2012-03-04}}</ref>
<!--
<ref name="вики.cpp">Файлы с расширением [[.cpp]]</ref>
-->
<ref name="eric">{{cite web|url=http://eric-ide.python-projects.org/|title=The Eric Python IDE|lang=en|publisher=Сайт Eric IDE|accessdate=10 мая 2010|archiveurl=http://www.webcitation.org/65uI9JyVD|archivedate=2012-03-04}}</ref>
<!--
<ref name="вики.py">Файлы с расширением [[Python|.py]]</ref>
-->
<ref name="py.pyqt">{{cite web|url=http://wiki.python.org/moin/PyQt|title=About PyQt|lang=en|publisher=Python Wiki|accessdate=10 мая 2010|archiveurl=http://www.webcitation.org/65uICUwfJ|archivedate=2012-03-04}}</ref>
<ref name="py.pyqt4">{{cite web|url=http://wiki.python.org/moin/PyQt4|title=PyQt4|lang=en|publisher=Python Wiki|accessdate=10 мая 2010|archiveurl=http://www.webcitation.org/65uMnGmU9|archivedate=2012-03-04}}</ref>
<ref name="nokia.designer">{{cite web|url=http://qt.nokia.com/products/developer-tools/developer-tools?currentflipperobject=937ba3e952f85ef68ddbb7cb4b20fc19|title=GUI Designer|lang=en|publisher=[[Nokia]]|accessdate=10 мая 2010|archiveurl=http://www.webcitation.org/65uMnrm5n|archivedate=2012-03-04}}</ref>
<ref name="sip.introduction">{{cite web|url=http://www.riverbankcomputing.com/static/Docs/sip4/introduction.html|title=Introduction — SIP|publisher=Сайт PyQt|date=|accessdate=14 августа 2010|lang=en|archiveurl=http://www.webcitation.org/65uMosJoa|archivedate=2012-03-04}}</ref>
<ref name="интервью">{{cite web|url=http://dot.kde.org/2006/08/08/phil-thompson-talks-about-pyqt|title=Phil Thompson Talks About PyQt|publisher=KDE.news|date=|accessdate=13 августа 2010|lang=en|archiveurl=http://www.webcitation.org/65uMpLuHw|archivedate=2012-03-04}}</ref>
<ref name="осн.лиц">{{cite web|url=http://www.riverbankcomputing.co.uk/software/pyqt/license|title=License|lang=en|publisher=Сайт PyQt|accessdate=10 мая 2010|archiveurl=http://www.webcitation.org/65uMpzkQx|archivedate=2012-03-04}}</ref>
<ref name="pyside.faq">{{cite web|url=http://www.pyside.org/faq/|title=PySide FAQ|lang=en|publisher=Сайт PySide|accessdate=10 мая 2010|archiveurl=http://www.webcitation.org/65uMrB1Sw|archivedate=2012-03-04}}</ref>
<ref name="книга.rapid_gui">{{книга|автор=Mark Summerfield.|заглавие=Rapid GUI Programming with Python and Qt|ссылка=http://www.qtrac.eu/pyqtbook.html|издание=1st|издательство=Prentice Hall|год=2008|allpages=648|isbn=978-0132354189}}</ref>
<ref name="осн.45">{{cite web|url=http://www.riverbankcomputing.com/news/pyqt-45|title=PyQt v4.5 Released|publisher=Сайт PyQt|date=|accessdate=10 мая 2010|lang=en|archiveurl=http://www.webcitation.org/65uMsmDDY|archivedate=2012-03-04}}</ref>
<ref name="осн.47">{{cite web|url=http://www.riverbankcomputing.com/news/pyqt-47|title=PyQt v4.7 Released|publisher=Сайт PyQt|date=|accessdate=10 мая 2010|lang=en|archiveurl=http://www.webcitation.org/65uMtxbn4|archivedate=2012-03-04}}</ref>
}}
== Литература ==
* {{книга
|заглавие = Qt 4.8 Профессиональное программирование на C++
|автор = Макс Шлее
|isbn = 978-5-9775-0736-3
|страницы = 912
|год = 2012
|место = СПб.
|издательство = «БХВ-Петербург»
|ссылка = http://www.ozon.ru/context/detail/id/8752092/
}}
* {{книга
|автор = Mark Summerfield.
|заглавие = Rapid GUI Programming with Python and Qt
|ссылка = http://www.qtrac.eu/pyqtbook.html
|издание = 1st
|издательство = [[Prentice Hall]]
|год = 2008
|pages = 648
|isbn = 978-0132354189
}}
* {{книга
|автор = Boudewijn Rempt.
|заглавие = GUI Programming with Python: QT Edition
|ссылка = http://www.commandprompt.com/community/pyqt/
|издательство = OpenDocs
|год = 2002
}}
* {{книга
|заглавие = Qt 4: Программирование GUI на C++. 2-е дополненное издание
|автор = Ж. Бланшет, М. Саммерфилд.
|isbn = 978-5-91136-059-7
|страницы = 736
|год = 2008
|место = М.
|издательство = КУДИЦ-ПРЕСС
}}
* {{книга
|заглавие = Qt 4.5 Профессиональное программирование на C++
|автор = Макс Шлее.
|isbn = 978-5-9775-0398-3
|страницы = 896
|год = 2010
|место = СПб.
|издательство = БХВ-Петербург
}}
== Ссылки ==
{{Чистить ссылки}}
{{Навигация
|Тема = PyQt
|Портал = Свободное программное обеспечение
|Викисловарь =
|Викиверситет =
|Викиучебник =
|Викицитатник =
|Викитека =
|Викивиды =
|Викиновости =
|Викисклад = Category:PyQt
|Метавики =
|Проект = Свободное программное обеспечение
}}
* [http://www.riverbankcomputing.com/software/pyqt/intro Официальный сайт проекта] {{ref-en}}
* [http://diotavelli.net/PyQtWiki Wiki сообщества PyQt и PyKDE] {{ref-en}}
* [http://doc.qt.nokia.com/ Официальная документация по Qt] {{ref-en}}
** [http://doc.crossplatform.ru Неофициальная документация по Qt на русском] (перевод в процессе) {{ref-ru}}
* [http://dot.kde.org/2006/08/08/phil-thompson-talks-about-pyqt Интервью с Филом Томпсоном — автором и разработчиком PyQt] {{ref-en}}
=== Статьи ===
* PyQt4 — Введение (часть [http://habrahabr.ru/blogs/python/31684/ 1], [http://habrahabr.ru/blogs/python/31685/ 2], [http://habrahabr.ru/blogs/python/31687/ 3], [http://habrahabr.ru/blogs/python/31690/ 4], [http://habrahabr.ru/blogs/python/52457/ 5]) {{ref-ru}}
* Программирование на PyQt4 (часть [http://habrahabr.ru/blogs/qt_software/44692/ 1], [http://habrahabr.ru/blogs/qt_software/44712/ 2], [http://habrahabr.ru/blogs/qt_software/45299/ 3]) {{ref-ru}}
* Разговариваем про PyQt4 (часть [http://habrahabr.ru/blogs/python/75226/ 1], [http://habrahabr.ru/blogs/python/75323/ 2]) {{ref-ru}}
* [http://www.rkblog.rk.edu.pl/w/p/introduction-pyqt4/ Мини-уроки] {{ref-en}}
* [http://zetcode.com/tutorials/pyqt4/ Мини-уроки] {{ref-en}}
* [http://asakasinsky.blogspot.com/2011/06/pyqt4.html Тестовое приложение на PyQt4] {{ref-ru}}
=== Прочее ===
* [http://www.youtube.com/watch?v=Ee8eRwjbcFk Создание браузера за 2 минуты (видео)] {{ref-en}}
* [http://wiki.python.org/moin/PyQt#PyQtapplications Приложения, использующие PyQt] {{ref-en}}
* [http://www.diotavelli.net/PyQtWiki/SomeExistingApplications Примеры программ, использующих PyQt] {{ref-en}}
{{Qt}}
{{FOSS}}
{{Инструментарии виджетов}}
[[Категория:PyQt| ]]
[[Категория:Наборы привязок Qt для языков программирования]]
[[Категория:Библиотеки Python]]
[[Категория:Свободные библиотеки программ]]
[[Категория:Программное обеспечение с лицензией GNU GPL]]
[[Категория:Кроссплатформенное программное обеспечение]]
[[Категория:Программное обеспечение для Linux]]
[[Категория:Программное обеспечение для Mac OS X]]
[[Категория:Программное обеспечение для Windows]]
[[Категория:Свободное программное обеспечение, написанное на C++]]
[[Категория:Свободное программное обеспечение, написанное на Python]]
[[Категория:Статьи с примерами кода Python]]
[[Категория:Появились в 1998 году]]
[[ar:باي كيوت]]
[[cs:PyQt]]
[[en:PyQt]]
[[es:PyQt]]
[[fa:پایکیوت]]
[[fr:PyQt]]
[[pl:PyQt]]
[[pt:PyQT]]
[[zh:PyQt]]' |