Шаг 3.
Библиотека PyQt5.
Знакомство с PyQt5. Структура PyQt-программы
На этом шаге мы построчно прокомментируем приведенную на предыдущем шаге программу.
Запускать программу мы научились. Теперь рассмотрим код программы из предыдущего шага построчно.
В первой строке указывается кодировка файла. Поскольку в Python 3 по умолчанию для сохранения исходного кода используется кодировка UTF-8, эту строку можно и не указывать.
Во второй строке подключается модуль QtWidgets - он содержит классы, реализующие компоненты графического интерфейса: окна, надписи, кнопки, текстовые поля и др. В третьей строке
производится подключение модуля sys, из которого нам потребуется список параметров, переданных в командной строке (argv), а также функция exit(), позволяющая
завершить выполнение программы.
Выражение:
арр = QtWidgets.QApplication(sys.argv)
создает объект приложения в виде экземпляра класса
QApplication. Конструктор этого класса принимает список параметров, переданных в командной строке. Следует помнить, что в
программе всегда должен быть объект приложения, причем обязательно только один. Может показаться, что после создания объекта он в программе больше нигде не используется, однако надо
понимать, что с его помощью осуществляется управление приложением незаметно для нас. Получить доступ к этому объекту из любого места в программе можно через атрибут
qApp из
модуля
QtWidgets. Например, вывести список параметров, переданных в командной строке, можно так:
print (QtWidgets.qApp.argv())
Следующее выражение:
window = Qtwidgets.QWidget()
создает объект окна в виде экземпляра класса
QWidget. Этот класс наследуют практически все классы, реализующие компоненты графического интерфейса. И любой компонент, не имеющий
родителя, обладает своим собственным окном.
Выражение:
window.setWindowTitle("Первая программа на PyQt")
задает текст, который будет выводиться в заголовке окна, для чего используется метод
setWindowTitle().
Очередное выражение:
задает минимальные размеры окна. В первом параметре метода
resize() указывается ширина окна, а во втором параметре - его высота. При этом надо учитывать, что метод
resize() указывает
размеры не самого окна, а его клиентской области, - размеры заголовка и ширина границ окна не учитываются. Также следует помнить, что эти размеры являются рекомендацией, - то есть, если
компоненты не помещаются в окне, оно будет увеличено.
Выражение:
label = QtWidgets.QLabel ("<center>Привет, мир!</center>")
создает объект надписи. Текст надписи задается в качестве параметра в конструкторе класса
QLabel. Обратите внимание, что внутри строки мы указали
HTML-теги, - а именно:
с помощью тега
<center> произвели выравнивание текста по центру компонента. Возможность использования
HTML-тегов и
CSS-атрибутов является отличительной
чертой библиотеки
PyQt - например, внутри надписи можно вывести таблицу или отобразить изображение. Это очень удобно.
Следующее выражение:
btnQuit = QtWidgets.QPushButton("&Закрыть окно")
создает объект кнопки. Текст, который будет отображен на кнопке, задается в качестве параметра в конструкторе класса
QPushButton. Обратите внимание на символ
& перед буквой
З -
таким образом задаются клавиши быстрого доступа. Если нажать одновременно клавишу
Alt и клавишу с буквой, перед которой в строке указан символ
&, то кнопка сработает.
Выражение:
vbox = QtWidgets.QVBoxLayout()
создает вертикальный контейнер. Все компоненты, добавляемые в этот контейнер, будут располагаться по вертикали сверху вниз в порядке добавления. Внутри контейнера автоматически производится
подгонка размеров добавляемых компонентов под размеры контейнера. При изменении размеров контейнера будет произведено изменение размеров всех компонентов.
В следующих двух выражениях:
vbox.addWidget(label)
vbox.addWidget(btnQuit)
с помощью метода
addWidget() производится добавление созданных ранее объектов надписи и кнопки в вертикальный контейнер. Так как объект надписи добавляется первым, он будет
расположен над кнопкой. При добавлении компонентов в контейнер они автоматически становятся потомками контейнера.
Новое выражение:
добавляет контейнер в основное окно с помощью метода
setLayout(). Таким образом, контейнер становится потомком основного окна.
Выражение:
btnQuit.clicked.connect(app.quit)
назначает обработчик сигнала
clicked() кнопки, который генерируется при ее нажатии. Этот сигнал доступен через одноименный атрибут класса кнопки и поддерживает метод
connect(),
который и назначает для него обработчик, переданный первым параметром метода. Обработчик представляет собой метод
quit() объекта приложения, выполняющий немедленное завершение его работы.
Такой метод принято называть
слотом.
Пояснение.
Сигналом в PyQt называется особое уведомление, генерируемое при наступлении какого-либо события в приложении: нажатия кнопки, ввода символа в текстовое поле,
закрытия окна и пр.
Очередное выражение:
выводит на экран окно и все компоненты, которые мы ранее в него добавили.
И, наконец, последнее выражение:
запускает бесконечный цикл обработки событий в приложении.
Код, расположенный после вызова метода ехес_(), будет выполнен только после завершения работы приложения, - поскольку результат выполнения метода ехес_() мы передаем
функции exit(), дальнейшее выполнение программы будет прекращено, а код возврата передан операционной системе.
На следующем шаге мы рассмотрим ООП-стиль создания окна.
Предыдущий шаг
Содержание
Следующий шаг