PyQT Python - это тулкит для разработки GUI приложений. Он представляет из себя смесь языка программирование Python и библиотеки Qt.
PyQt представляет из себя набор модулей Python. Она содержит более 300 классов и почти 6000 функций и методов. Это мультиплатформенный тулкит. Он работает на всех основных операционных системах, включая Unix, Windows и MacOS.
Начиная с версии PyQt 4 GPL доступна для всех поддерживаемых платформ.
Так как тулкит содержит большое количество классов, они распределены в несколько модулей.
Модуль QtCore содержит ядро не-gui функциональности. Этот модуль используется для работы со временем, файлами и папками, различными типами даных, потоками, адресами URL, mime-типами, потоками процессов.
Модуль QtGui содержит графические компоненты и связанные классы. Сюда включены, например, кнопки, окна, строки состояния, панели инструментов, полосы прокрутки, изображения (bitmap), цвета, шрифты и др.
Модуль QtNetwork содержит классы для сетевого программирования. Эти классы позволяют писать TCP/IP и UDP клиенты и серверы. Они делают сетевое программирование легче и более доступным.
Модуль QtXml содержит классы для работы с xml файлами. Он предоставляет реализации API SAX и DOM.
Модуль QtSvg предоставляет классы для отображения содержимого SVG файлов. Масштабируемая векторная графика (SVG) – это язык описания двумерной графики и графических приложений на языке XML.
Модуль QtOpenGL используется для построения 3D и 2D графики с помощью библиотеки OpenGL.
Модуль дает возможность бесшовной интеграции библиотек QtGui и OpenGL.
Модуль QtSql содержит классы для работы с базами данных.
#!/usr/bin/python
# simple.py
import sys
from PyQt4 import QtGui
app = QtGui.QApplication(sys.argv)
widget = QtGui.QWidget()
widget.resize(250, 150)
widget.setWindowTitle('simple')
widget.show()
sys.exit(app.exec_())
import sys
from PyQt4 import QtGui
Подключаем необходимые модули. Основные GUI виджеты находятся в библиотеке QtGui.
app = QtGui.QApplication(sys.argv)
Каждое приложение PyQt4 должно создать объект Qapplication. Этот объект находится в модуле QtGui. Параметр sys.argv это список аргументов командной строки. Скрипты Python могут быть запущены из консоли, и с помощью аргументов мы можем контролировать запуск приложения.
widget = QtGui.QWidget()
Qwidget это базовый класс для всех объектов интерфейса пользователя для PyQt4. Мы используем стандартный конструктор для Qwidget, который не имеет родителя. Виджет у которого нет родительского является окном.
widget.resize(250, 150)
Метод resize() изменяет размеры виджета. В данном случае 250 пикселей по ширине и 150 по высоте.
widget.setWindowTitle('simple')
Здесь мы устанавлиаем заголовок окна на simple.
widget.show()
Метод show() отображает окно на экране.
sys.exit(app.exec())
В конце мы запускаем основной цикл приложения. Отсюда начинается обработка событий. Приложение получает события от оконной системы и распределяет их по виджетам. Когда цикл заканчивается, или, если мы вызовем метод exit(), то наше окно (главный виджет) будет уничтожено. Метод sys.exit() гарантирует чистый выход. Окружение будет проинформировано о том, как приложение завершилось.
Вы удивлены почему метод exec_() записан с подчеркиваение? Это сделано потому, что exec - это ключевое слово в Python.
#!/usr/bin/python
# icon.py
import sys
from PyQt4 import QtGui
class Icon(QtGui.QWidget):
def __init__(self, parent=None):
QtGui.QWidget.__init__(self, parent)
self.setGeometry(300, 300, 250, 150)
self.setWindowTitle('Icon')
self.setWindowIcon(QtGui.QIcon('icons/web.png'))
app = QtGui.QApplication(sys.argv)
icon = Icon()
icon.show()
sys.exit(app.exec_())
В предыдущем примере код был процедурным. Python поддерживает как процедурный, так и объектно-ориентированный стиль программирования. Программирование на PyQt предполагает ООП программирование.
class Icon(QtGui.QWidget):
def __init__(self, parent=None):
QtGui.QWidget.__init__(self, parent)
Три наиболее важные вещи в объектно-ориентированном программировании - это классы, данные и методы. Здесь мы создаем новый класс Icon. Класс Icon наследован от класса QtGui.QWidget. Это значит, что мы должны вызвать два конструктора: во-первых, для класса Icon и, во-вторых, для наследованного класса.
self.setGeometry(300, 300, 250, 150)
self.setWindowTitle('Icon')
self.setWindowIcon(QtGui.QIcon('icons/web.png'))
Все три класса наследованы от класса QtGui.QWidget. Метод setGeometry() делает две вещи: он определяет положение окна и его размеры. Первые два параметра это координаты по оси X и Y соответственно. Третий задает ширину окна, а четвёртый высоту. Последний метод setWindowIcon() устанавливает иконку программы. Чтобы сделать это, мы создаём объект QIcon. В качестве параметра передаётся путь до файла иконки.
#!/usr/bin/python
# tooltip.py
import sys
from PyQt4 import QtGui
from PyQt4 import QtCore
class Tooltip(QtGui.QWidget):
def __init__(self, parent=None):
QtGui.QWidget.__init__(self, parent)
self.setGeometry(300, 300, 250, 150)
self.setWindowTitle('Tooltip')
self.setToolTip('This is a QWidget widget')
QtGui.QToolTip.setFont(QtGui.QFont('OldEnglish', 10))
app = QtGui.QApplication(sys.argv)
tooltip = Tooltip()
tooltip.show()
app.exec_()
В этом примере, мы показываем подсказку для виджета Qwidget.
self.setToolTip('This is a QWidget widget')
Для создания подсказки вызываем метод setToolTip(). Можно использовать HTML-тэги для форматирования.
QtGui.QToolTip.setFont(QtGui.QFont('OldEnglish', 10))
Потому как обычный QtoolTip выглядит не лучшим образом, мы изменили его.
QPushButton(string text, QWidget parent = None)
Это конструктор QPushButton, который мы будем использовать в нашем примере. Параметр text - это текст, который будет отображаться на кнопке, parent - тот виджет, на который мы поместим кнопку. В нашем случае это Qwidget.
#!/usr/bin/python
# quitbutton.py
import sys
from PyQt4 import QtGui, QtCore
class QuitButton(QtGui.QWidget):
def __init__(self, parent=None):
QtGui.QWidget.__init__(self, parent)
self.setGeometry(300, 300, 250, 150)
self.setWindowTitle('Icon')
quit = QtGui.QPushButton('Close', self)
quit.setGeometry(10, 10, 60, 35)
self.connect(quit, QtCore.SIGNAL('clicked()'),
QtGui.qApp, QtCore.SLOT('quit()'))
app = QtGui.QApplication(sys.argv)
qb = QuitButton()
qb.show()
sys.exit(app.exec_())
quit = QtGui.QPushButton('Close', self)
quit.setGeometry(10, 10, 60, 35)
Мы создаём кнопку и располагаем её на виджете также, как мы размещали виджет на экране.
self.connect(quit, QtCore.SIGNAL('clicked()'),
QtGui.qApp, QtCore.SLOT('quit()'))
Система обработки событий в PyQt построена на механизме сигналов и слотов. Если мы щёлкнем на кнопке, то будет послан сигнал clicked(). Слот может быть как слотом PyQt так и любым возможным для языка Python. Метод QtCore.QObject.connect() соединяет сигнал и слот. В нашем случае слот является предопределённым слотов PyQt.
#!/usr/bin/python
# messagebox.py
import sys
from PyQt4 import QtGui
class MessageBox(QtGui.QWidget):
def __init__(self, parent=None):
QtGui.QWidget.__init__(self, parent)
self.setGeometry(300, 300, 250, 150)
self.setWindowTitle('message box')
def closeEvent(self, event):
reply = QtGui.QMessageBox.question(self, 'Message',
"Are you sure to quit?", QtGui.QMessageBox.Yes, QtGui.QMessageBox.No)
if reply == QtGui.QMessageBox.Yes:
event.accept()
else:
event.ignore()
app = QtGui.QApplication(sys.argv)
qb = MessageBox()
qb.show()
sys.exit(app.exec_())
Когда мы закрываем виджет, генерируется событие QCloseEvent. Для изменения поведения виджета нам нужно изменить обработчик события QCloseEvent.
reply = QtGui.QMessageBox.question(self, 'Message',
"Are you sure to quit?", QtGui.QMessageBox.Yes, QtGui.QMessageBox.No)
Мы выводим сообщение с двумя кнопками “Да” и “Нет”. Первая строка ('Message') выводится в заголовке окна, вторая - текст сообщения. Возвращаемое значение хранится в переменной reply.
if reply == QtGui.QMessageBox.Yes:
event.accept()
else:
event.ignore()
Здесь мы проверяем возвращаемое значение: если щелкнули по кнопке “yes”, то мы принимаем стандартный обработчик, иначе – игнорируем закрытие.
PyQt представляет из себя набор модулей Python. Она содержит более 300 классов и почти 6000 функций и методов. Это мультиплатформенный тулкит. Он работает на всех основных операционных системах, включая Unix, Windows и MacOS.
Начиная с версии PyQt 4 GPL доступна для всех поддерживаемых платформ.
Так как тулкит содержит большое количество классов, они распределены в несколько модулей.
Модули Python PyQt
Модуль QtCore содержит ядро не-gui функциональности. Этот модуль используется для работы со временем, файлами и папками, различными типами даных, потоками, адресами URL, mime-типами, потоками процессов.
Модуль QtGui содержит графические компоненты и связанные классы. Сюда включены, например, кнопки, окна, строки состояния, панели инструментов, полосы прокрутки, изображения (bitmap), цвета, шрифты и др.
Модуль QtNetwork содержит классы для сетевого программирования. Эти классы позволяют писать TCP/IP и UDP клиенты и серверы. Они делают сетевое программирование легче и более доступным.
Модуль QtXml содержит классы для работы с xml файлами. Он предоставляет реализации API SAX и DOM.
Модуль QtSvg предоставляет классы для отображения содержимого SVG файлов. Масштабируемая векторная графика (SVG) – это язык описания двумерной графики и графических приложений на языке XML.
Модуль QtOpenGL используется для построения 3D и 2D графики с помощью библиотеки OpenGL.
Модуль дает возможность бесшовной интеграции библиотек QtGui и OpenGL.
Модуль QtSql содержит классы для работы с базами данных.
Простой пример Python PyQT
Код данного отображает небольшое окно. Однако вы сможете сделать с ним многое. Вы сможете изменить его размеры, распахнуть на весь экран, минимизировать.#!/usr/bin/python
# simple.py
import sys
from PyQt4 import QtGui
app = QtGui.QApplication(sys.argv)
widget = QtGui.QWidget()
widget.resize(250, 150)
widget.setWindowTitle('simple')
widget.show()
sys.exit(app.exec_())
import sys
from PyQt4 import QtGui
Подключаем необходимые модули. Основные GUI виджеты находятся в библиотеке QtGui.
app = QtGui.QApplication(sys.argv)
Каждое приложение PyQt4 должно создать объект Qapplication. Этот объект находится в модуле QtGui. Параметр sys.argv это список аргументов командной строки. Скрипты Python могут быть запущены из консоли, и с помощью аргументов мы можем контролировать запуск приложения.
widget = QtGui.QWidget()
Qwidget это базовый класс для всех объектов интерфейса пользователя для PyQt4. Мы используем стандартный конструктор для Qwidget, который не имеет родителя. Виджет у которого нет родительского является окном.
widget.resize(250, 150)
Метод resize() изменяет размеры виджета. В данном случае 250 пикселей по ширине и 150 по высоте.
widget.setWindowTitle('simple')
Здесь мы устанавлиаем заголовок окна на simple.
widget.show()
Метод show() отображает окно на экране.
sys.exit(app.exec())
В конце мы запускаем основной цикл приложения. Отсюда начинается обработка событий. Приложение получает события от оконной системы и распределяет их по виджетам. Когда цикл заканчивается, или, если мы вызовем метод exit(), то наше окно (главный виджет) будет уничтожено. Метод sys.exit() гарантирует чистый выход. Окружение будет проинформировано о том, как приложение завершилось.
Вы удивлены почему метод exec_() записан с подчеркиваение? Это сделано потому, что exec - это ключевое слово в Python.
Иконка приложения Python PyQT.
Иконка программы - это просто маленькое изображение, которое обычно отображается в левом верхнем углу заголовка. В следующем примере мы покажем как сделать это на PyQt. Мы также представим некоторые новые методы.#!/usr/bin/python
# icon.py
import sys
from PyQt4 import QtGui
class Icon(QtGui.QWidget):
def __init__(self, parent=None):
QtGui.QWidget.__init__(self, parent)
self.setGeometry(300, 300, 250, 150)
self.setWindowTitle('Icon')
self.setWindowIcon(QtGui.QIcon('icons/web.png'))
app = QtGui.QApplication(sys.argv)
icon = Icon()
icon.show()
sys.exit(app.exec_())
В предыдущем примере код был процедурным. Python поддерживает как процедурный, так и объектно-ориентированный стиль программирования. Программирование на PyQt предполагает ООП программирование.
class Icon(QtGui.QWidget):
def __init__(self, parent=None):
QtGui.QWidget.__init__(self, parent)
Три наиболее важные вещи в объектно-ориентированном программировании - это классы, данные и методы. Здесь мы создаем новый класс Icon. Класс Icon наследован от класса QtGui.QWidget. Это значит, что мы должны вызвать два конструктора: во-первых, для класса Icon и, во-вторых, для наследованного класса.
self.setGeometry(300, 300, 250, 150)
self.setWindowTitle('Icon')
self.setWindowIcon(QtGui.QIcon('icons/web.png'))
Все три класса наследованы от класса QtGui.QWidget. Метод setGeometry() делает две вещи: он определяет положение окна и его размеры. Первые два параметра это координаты по оси X и Y соответственно. Третий задает ширину окна, а четвёртый высоту. Последний метод setWindowIcon() устанавливает иконку программы. Чтобы сделать это, мы создаём объект QIcon. В качестве параметра передаётся путь до файла иконки.
Всплывающая подсказка Python PyQT.
Мы можем создать всплывающую подсказку для любого виджета.#!/usr/bin/python
# tooltip.py
import sys
from PyQt4 import QtGui
from PyQt4 import QtCore
class Tooltip(QtGui.QWidget):
def __init__(self, parent=None):
QtGui.QWidget.__init__(self, parent)
self.setGeometry(300, 300, 250, 150)
self.setWindowTitle('Tooltip')
self.setToolTip('This is a QWidget widget')
QtGui.QToolTip.setFont(QtGui.QFont('OldEnglish', 10))
app = QtGui.QApplication(sys.argv)
tooltip = Tooltip()
tooltip.show()
app.exec_()
В этом примере, мы показываем подсказку для виджета Qwidget.
self.setToolTip('This is a QWidget widget')
Для создания подсказки вызываем метод setToolTip(). Можно использовать HTML-тэги для форматирования.
QtGui.QToolTip.setFont(QtGui.QFont('OldEnglish', 10))
Потому как обычный QtoolTip выглядит не лучшим образом, мы изменили его.
Закрытие окна Python PyQT.
Самый очевидный путь закрытия окна, это щелкнуть на кнопке закрытия в заголовке окна. В следующем примере мы покажем как можно программно закрыть окно. Для этого мы кратко коснёмся сигналов и слотов.QPushButton(string text, QWidget parent = None)
Это конструктор QPushButton, который мы будем использовать в нашем примере. Параметр text - это текст, который будет отображаться на кнопке, parent - тот виджет, на который мы поместим кнопку. В нашем случае это Qwidget.
#!/usr/bin/python
# quitbutton.py
import sys
from PyQt4 import QtGui, QtCore
class QuitButton(QtGui.QWidget):
def __init__(self, parent=None):
QtGui.QWidget.__init__(self, parent)
self.setGeometry(300, 300, 250, 150)
self.setWindowTitle('Icon')
quit = QtGui.QPushButton('Close', self)
quit.setGeometry(10, 10, 60, 35)
self.connect(quit, QtCore.SIGNAL('clicked()'),
QtGui.qApp, QtCore.SLOT('quit()'))
app = QtGui.QApplication(sys.argv)
qb = QuitButton()
qb.show()
sys.exit(app.exec_())
quit = QtGui.QPushButton('Close', self)
quit.setGeometry(10, 10, 60, 35)
Мы создаём кнопку и располагаем её на виджете также, как мы размещали виджет на экране.
self.connect(quit, QtCore.SIGNAL('clicked()'),
QtGui.qApp, QtCore.SLOT('quit()'))
Система обработки событий в PyQt построена на механизме сигналов и слотов. Если мы щёлкнем на кнопке, то будет послан сигнал clicked(). Слот может быть как слотом PyQt так и любым возможным для языка Python. Метод QtCore.QObject.connect() соединяет сигнал и слот. В нашем случае слот является предопределённым слотов PyQt.
Окно сообщений Python PyQT.
Обычно, при щелчке на кнопке закрытия в заголовке окна виджет закрывается. Иногда нам нужно изменить это действие. Например, если у нас открыт файл в редакторе с которым мы сделали какие-то изменения. В этом случае мы показываем пользователю сообщение для подтверждения выбранного действия.#!/usr/bin/python
# messagebox.py
import sys
from PyQt4 import QtGui
class MessageBox(QtGui.QWidget):
def __init__(self, parent=None):
QtGui.QWidget.__init__(self, parent)
self.setGeometry(300, 300, 250, 150)
self.setWindowTitle('message box')
def closeEvent(self, event):
reply = QtGui.QMessageBox.question(self, 'Message',
"Are you sure to quit?", QtGui.QMessageBox.Yes, QtGui.QMessageBox.No)
if reply == QtGui.QMessageBox.Yes:
event.accept()
else:
event.ignore()
app = QtGui.QApplication(sys.argv)
qb = MessageBox()
qb.show()
sys.exit(app.exec_())
Когда мы закрываем виджет, генерируется событие QCloseEvent. Для изменения поведения виджета нам нужно изменить обработчик события QCloseEvent.
reply = QtGui.QMessageBox.question(self, 'Message',
"Are you sure to quit?", QtGui.QMessageBox.Yes, QtGui.QMessageBox.No)
Мы выводим сообщение с двумя кнопками “Да” и “Нет”. Первая строка ('Message') выводится в заголовке окна, вторая - текст сообщения. Возвращаемое значение хранится в переменной reply.
if reply == QtGui.QMessageBox.Yes:
event.accept()
else:
event.ignore()
Здесь мы проверяем возвращаемое значение: если щелкнули по кнопке “yes”, то мы принимаем стандартный обработчик, иначе – игнорируем закрытие.
Комментариев нет:
Отправить комментарий