PyQt

PyQt
PyQt
Python и Qt
Qt Designer
Qt Designer в Linux с KDE
Тип

Привязка Qt для Python

Разработчик

Riverbank Computing

Написана на

C++, Python[источник не указан 851 день]

Операционная система

Кроссплатформенное

Первый выпуск

1998 год

Последняя версия

4.9.5 (29 сентября 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].

Содержание

Обзор основных модулей

  • 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

Применение

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

См. также

Примечания

  1. 1 2 Riverbank Computing  (англ.). Сайт Nokia. Архивировано из первоисточника 4 марта 2012. Проверено 10 мая 2010.
  2. 1 2 What is PyQt?  (англ.). Сайт PyQt. Архивировано из первоисточника 4 марта 2012. Проверено 10 мая 2010.
  3. PyQt Whitepaper  (англ.). Сайт PyQt. Архивировано из первоисточника 4 марта 2012. Проверено 10 мая 2010.
  4. The Eric Python IDE  (англ.). Сайт Eric IDE. Архивировано из первоисточника 4 марта 2012. Проверено 10 мая 2010.
  5. About PyQt  (англ.). Python Wiki. Архивировано из первоисточника 4 марта 2012. Проверено 10 мая 2010.
  6. PyQt4  (англ.). Python Wiki. Архивировано из первоисточника 4 марта 2012. Проверено 10 мая 2010.
  7. GUI Designer  (англ.). Nokia. Архивировано из первоисточника 4 марта 2012. Проверено 10 мая 2010.
  8. Introduction — SIP  (англ.). Сайт PyQt. Архивировано из первоисточника 4 марта 2012. Проверено 14 августа 2010.
  9. 1 2 Phil Thompson Talks About PyQt  (англ.). KDE.news. Архивировано из первоисточника 4 марта 2012. Проверено 13 августа 2010.
  10. License  (англ.). Сайт PyQt. Архивировано из первоисточника 4 марта 2012. Проверено 10 мая 2010.
  11. PySide FAQ  (англ.). Сайт PySide. Архивировано из первоисточника 4 марта 2012. Проверено 10 мая 2010.
  12. 1 2 3 4 5 Mark Summerfield. Rapid GUI Programming with Python and Qt. — 1st. — Prentice Hall, 2008. — 648 p. — ISBN 978-0132354189
  13. PyQt v4.5 Released  (англ.). Сайт PyQt. Архивировано из первоисточника 4 марта 2012. Проверено 10 мая 2010.
  14. PyQt v4.7 Released  (англ.). Сайт PyQt. Архивировано из первоисточника 4 марта 2012. Проверено 10 мая 2010.

Литература

Ссылки


Wikimedia Foundation. 2010.

Игры ⚽ Поможем написать реферат

Полезное


Смотреть что такое "PyQt" в других словарях:

  • PyQt — est un module libre qui permet de lier le langage Python avec la bibliothèque Qt distribué sous deux licences : une commerciale et la GNU GPL. Il permet ainsi de créer des interfaces graphiques en Python. Une extension de QtDesigner… …   Wikipédia en Français

  • PyQt — Saltar a navegación, búsqueda PyQt Desarrollador Riverbank Computing www.riverbankcomputing.com Información general …   Wikipedia Español

  • PyQt — Infobox Software name = PyQT caption = developer = [http://www.riverbankcomputing.co.uk/ Riverbank Computing] latest release version = 4.4.2 latest release date = latest preview version = latest preview date = operating system = Cross platform… …   Wikipedia

  • PyQt — Qt Entwickler: Qt Software Aktuelle Version: 4.5.1 (23. April 2009) …   Deutsch Wikipedia

  • PyQT — …   Википедия

  • PySide — Релиз: 1.1.2 (11 сентября 2012) Лицензия LGPL Сайт: Официальный сайт PySide  привязка языка Pytho …   Википедия

  • Qt (Bibliothek) — Qt Entwickler Qt Project Aktuelle Version 4.7.4 (1. September 2011) Betriebssystem …   Deutsch Wikipedia

  • Qt — У этого термина существуют и другие значения, см. QT. Qt …   Википедия

  • PyGTK — Тип разработка графического интерфейса Автор James Henstridge Johan Dahlin Разработчики сообщество Написана на Python, C Операционная система Linux и др. UNIX подобные, Windows …   Википедия

  • Mnemosyne — У этого термина существуют и другие значения, см. Мнемозина (значения). Mnemosyne Тип spaced repetition Разработчики Peter Bienstman и другие[1] Написана на …   Википедия


Поделиться ссылкой на выделенное

Прямая ссылка:
Нажмите правой клавишей мыши и выберите «Копировать ссылку»