Сегодня мы познакомимся с серьезным инструментом для создания интерфейсов — PyQt. Это одна из стандартных библиотек в языке Python
Сразу предупредим: для работы с этой библиотекой (как, впрочем, и с любой другой) лучше подтянуть английский. Если вы всё время откладывали этот нелёгкий процесс, то изучение Python станет триггером снова возобновить совершенствование языка. Не секрет, что лучшие результаты показывают уроки с учителем английского носителя языка (для которого он родной). Пожалуй, обучение именно в таком формате даёт максимальную эффективность по понимаю речи и чтению без словаря. Для будущего программиста это очень важно, особенно когда замаячит релокейт.
Что такое PyQt
PyQt — реализация мощного фреймворка Qt для языка Python. В основном, для создания GUI, используется именно он, хотя в питоне есть и встроенный фреймворк — tkinter. Основное понятие в PyQt — это виджет. Виджет — это своеобразный элемент управления, которые мы можем «подогнать» под свой дизайн, свой интерфейс.
Как же создается интерфейс для приложения в PyQt? Сделать это можно как программно, через код, так и в дизайнере — специальном GUI-конструкторе. Продвинутые разработчики рекомендуют использовать именно программный способ — в этом случае вы получаете полный контроль над интерфейсом и понимаете суть работы с ним.
Пишем интерфейс
Установить PyQt можно через консоль — командой pip install pyqt5 , либо вбив PyQt5 в настройках интерпретатора.
Как мы уже писали выше — будет неплохо научиться писать интерфейсы через код, а не собирать его посредством подхода WYSIWYG. Для этого в PyQt есть встроенная среда для разработки графических интерфейсов (GUI) под названием QtDesigner. Сейчас же мы разберем простой пример, где мы «вручную» создадим элемент графического интерфейса — обычное окно. Для начала мы импортируем все виджеты из библиотеки pyqt — объекты для отображения интерфейса: from PyQt5.QtWidgets import QApplication, QWidget . QWidget — это базовый класс для всех элементов.
Далее пропишем объект-приложение. Это необходимо для возможности запуска приложения: app = QApplication(sys.argv) . Команда обязательная. Создаем объект класса — w = QWidget() . Теперь пропишем параметры нашего окна (в пикселях): w.resize(350, 250) . Следующий параметр позволяет нам запускать окно там, где необходимо на экране: w.move(500, 500) . Далее сделаем нужный заголовок: w.setWindowTitle(‘Storydigital.ru’) и сделаем его «видимым» командой show: w.show() . Запуск приложения осуществляется так: sys.exit(app.exec_())
Полный листинг:
import sys from PyQt5.QtWidgets import QApplication, QWidget if __name__ == '__main__': app = QApplication(sys.argv) w = QWidget() w.resize(350, 250) w.move(500, 500) w.setWindowTitle('Digital2.ru') w.show() sys.exit(app.exec_())
Результат:
Продвинутый вариант
Теперь рассмотрим более сложный пример с наличием toolbar’а в нашем мини-приложении. Здесь дополнительно импортируется модуль QMainWindow для создания главного окна. Там где будут располагаться все элементы интерфейса. Создавая класс мы наследуемся именно от него — class Example(QMainWindow) . Так же мы вызываем метод класса — self.initUI() — он отвечает за инициализацию этого самого окна. В этом примере мы создаем кнопку в панели инструментов — self.toolbar = self.addToolBar(‘Exit’) . Пока у нас один «экшн» — это выход из программы. Он реализуется с помощью обработчика нажатия (triggered — проверка нажатия кнопки). Связываем событие нажатие с обработчиком. В нашем случае он стандартный. Полная конструкция выглядит так: exitAction.triggered.connect(qApp.quit)
Полный листинг:
import sys from PyQt5.QtWidgets import QMainWindow, QAction, qApp, QApplication from PyQt5.QtGui import QIcon class Example(QMainWindow): def __init__(self): super().__init__() self.initUI() def initUI(self): # action - это то действие, которое будет выполняться при нажатии exitAction = QAction(QIcon('exit.png'), 'Exit', self) exitAction.setShortcut('Ctrl+Q') exitAction.triggered.connect(qApp.quit) self.toolbar = self.addToolBar('Exit') self.toolbar.addAction(exitAction) self.setGeometry(300, 300, 300, 200) self.setWindowTitle('SuperApp') self.show() if __name__ == '__main__': app = QApplication(sys.argv) ex = Example() sys.exit(app.exec_())
Результат:
Подключение интерфейса
Допустим, вы нарисовали свой интерфейс через приложение Qt Designer. У нас есть файл .ui. Как его связать с кодом приложения? Для этого используется модуль uic из библиотеки PyQt5. Конкретно — функция uic.loadUi(‘interface.ui’, self).
Полный листинг:
from PyQt5 import QtWidgets, uic import sys class MyWindow(QtWidgets.QWidget): def __init__(self, parent=None): QtWidgets.QWidget.__init__(self, parent) uic.loadUi('Interface.ui', self) self.btnQuit.clicked.connect(QtWidgets.qApp.quit) if __name__ == '__main__': app = QtWidgets.QApplication(sys.argv) window = MyWindow() window.show() sys.exit(app.exec_())
Как вам статья?