Форум Статьи Контакты
Строительство — возведение зданий и сооружений, а также их капитальный и текущий ремонт, реконструкция, реставрация и реновация.

PyQt

Дата: 24-08-2021, 16:00 » Раздел: Статьи  » 

PyQt — набор расширений (биндингов) графического фреймворка Qt для языка программирования Python, выполненный в виде расширения Python.

PyQt разработан британской компанией Riverbank Computing. PyQt работает на всех платформах, поддерживаемых Qt: Linux и другие UNIX-подобные ОС, Mac OS X и 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. Программа показывает пустое окно, обладающее базовыми функциями — изменение размера, сворачивание, разворачивание:

Более сложный пример

В этом примере показаны принципы создания более серьёзных программ. Используется 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++ библиотекам.

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-принтеров с открытым исходным кодом.
  • Electrum — популярный open-source 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, бесплатное программное обеспечение для настольных систем Geographic Information Systems (GIS)
  • qt-recordMyDesktop, Интерфейс Qt4 для recordMyDesktop
  • Spyder, Python Data Science IDE
  • TortoiseHg, графический интерфейс для программы управления источниками Mercurial (Hg)
  • Veusz, научное приложение для черчения

Применение

PyQt — продукт, имеющий широкую пользовательскую базу. Среди коммерческих пользователей PyQt можно отметить такие известные корпорации, как Disney, Dreamworks, Pixar, Industrial Light and Magic и Sony Pictures. Всего коммерческих пользователей более 200 (по данным в 2006 году).


(голосов:0)

Пожожие новости
Tk
Комментарии

Ваше Имя:   

Ваш E-Mail: