Python регулярно включают в разнообразные рейтинги лучших языков программирования благодаря большому сообществу и легко читаемому синтаксису. Более того, Python под силу создать современный графический пользовательский интерфейс — GUI — для обычных скриптов. В руководстве уделим внимание модулю для разработки GUI PyQt5
, но стоит также упомянуть аналоги: Tkinter
и WxWidget
.
Статья подойдет в том числе и начинающим программистам, поэтому, не теряя времени, приступаем!
Содержание руководства:
- Установка и настройка PyQt5.
- Основы PyQt5.
- Заголовок окна.
- События и кнопки.
- Поля ввода.
- Окна сообщений и всплывающие окна.
- Выводы.
1. Установка и настройка PyQt5
Скачайте и установите последнюю версию Python для вашей системы, а если Python уже на месте, то установите пакеты при помощи следующей команды (откройте командную строку, введите и нажмите Enter):
pip install pyqt5
2. Основы PyQt5
Теперь на вашем компьютере сохранен пакет PyQt5
, поэтому давайте начнем с написания первого окна графического интерфейса. Откройте ваш любимый текстовый редактор или IDE и выполните приведенный ниже код:
# Построение Windows GUI
import sys
from PyQt5 import QtWidgets
from PyQt5.QtWidgets import QApplication, QMainWindow, QLabel
def main():
app = QApplication(sys.argv)
win = QMainWindow()
win.setGeometry(400,400,400,300)
win.setWindowTitle("Pyqt5 Tutorial")
win.show()
sys.exit(app.exec_())
main()
Результат выполнения программы:
Теперь разберем код окна интерфейса с заголовком сверху. Если обсуждать кратко, то в первую очередь импортируем PyQt5
и его классы, полезные в создании виджета GUI, а затем создаем функцию main()
для реализации оконного интерфейса.
QMainWindow()
— словно контейнер, содержащий все виджеты, такие как кнопки, текст, поле ввода и т. д.SetGeometry()
— один из методовQMainWindow()
, устанавливает размер окна. Синтаксис:setGeometry(x, y, длина, ширина)
.SetWindowTitle()
— устанавливает заголовок окна.Win.show()
— создает и отображает весь разработанный интерфейс.Sys.exit(app.exec_())
— устанавливает, что конкретное окно не закроется без нажатия на кнопку с крестиком. Без этой строчки кода GUI-программа завершится через секунду после выполнения.
3. Заголовок окна
Label Text — это текст, отображаемый внутри окна. С написанием Label Text в PyQt5
вам поможет виджет Qlabel
.
Выполните следующий код:
import sys
from PyQt5 import QtWidgets
from PyQt5.QtWidgets import QApplication, QMainWindow, QLabel
def main():
app = QApplication(sys.argv)
win = QMainWindow()
win.setGeometry(400,400,400,300)
win.setWindowTitle("Pyqt5 Tutorial")
#Label Text
label= QLabel(win)
label.setText("Hi this is Pyqt5")
label.move(100,100)
win.show()
sys.exit(app.exec_())
main()
Результат выполнения программы:
Если кратко, то вызываем метод Qlabel()
и передаем в него переменную QMainWindow
.
- Метод
SetText()
устанавливает Label Text, в качестве аргумента принимает только строковые данные. - Метод
Move(x, y)
применяется для установки положения Label Text внутри окна.
4. События и кнопки
Кнопки — важная часть любого программного обеспечения, ведь именно кнопка определяет действие пользователя, а следовательно, и результат работы программы тоже. Для создания кнопок в PyQt5
придётся применить другой виджет под названием QtWidgets
, выполните следующий код:
import sys
from PyQt5 import QtWidgets
from PyQt5.QtWidgets import QApplication, QMainWindow, QLabel
def main():
app = QApplication(sys.argv)
win = QMainWindow()
win.setGeometry(400,400,400,300)
win.setWindowTitle("Pyqt5 Tutorial")
#Button
button = QtWidgets.QPushButton(win)
button.setText("Hi! Click Me")
button.move(100,100)
win.show()
sys.exit(app.exec_())
main()
Результат выполнения программы:
В коде вышеизложенного примера переменная QMainWindow
передается в метод из Qwidget
под названием QPushbutton
. Далее разберем код примера по пунктам.
SetText()
устанавливает название для кнопки, как можно увидеть на приведенном выше изображении.Move()
снова применяется для установки положения кнопки в окне по координатам на осях x и y.
Теперь пришел черед событийно-ориентированного программирования (Event-Driven-Programming)! Проще говоря, нужно определить действие для кнопки, то есть, если пользователь на нее нажмет, то что-то должно произойти. Ознакомьтесь со следующим кодом, а дальше рассмотрим подробные объяснения:
import sys
from PyQt5 import QtWidgets
from PyQt5.QtWidgets import QApplication, QMainWindow, QLabel
def click():
print("Hy Button is clicked!")
def main():
app = QApplication(sys.argv)
win = QMainWindow()
win.setGeometry(400,400,400,300)
win.setWindowTitle("Pyqt5 Tutorial")
#Button Click
button = QtWidgets.QPushButton(win)
button.setText("Hi! Click Me")
button.move(100,100)
button.clicked.connect(click)
win.show()
sys.exit(app.exec_())
main()
Теперь в примере определяется не только главная функция по имени main()
, но и функция по имени click()
, передающаяся в качестве параметра для button.clicked.connect()
в main()
. Таким образом указывается конкретная функция, срабатывающая при нажатии на конкретную кнопку.
Запустив такой код и нажав на кнопку, вы увидите вывод на экране консоли. Дело за вами, что же написать внутри функции click()
! Протестируйте код на вашей операционной системе.
5. Поля ввода
Поля ввода также называются текстовыми полями — это области для пользовательского ввода информации. Для объявления поля ввода в PyQt5
применяется специальный виджет QlineEdit()
, а в него, как обычно, передается в качестве параметра QMainWindow
.
Посмотрите на следующий код и обратите внимание на его результат:
import sys
from PyQt5 import QtWidgets
from PyQt5.QtWidgets import QApplication, QMainWindow, QLabel
def main():
app = QApplication(sys.argv)
win = QMainWindow()
win.setGeometry(400,400,400,300)
win.setWindowTitle("Pyqt5 Tutorial")
#Entry Box / Text Box
textbox = QtWidgets.QLineEdit(win)
textbox.move(100, 100)
textbox.resize(180,40)
win.show()
sys.exit(app.exec_())
main()
Результат выполнения программы:
Resize(width, height)
изменяет размер виджета поля ввода.
6. Окна сообщений и всплывающие окна
Окна сообщений и всплывающие окна (popups) — это альтернативные маленькие окна, например, вы создаете программу для регистрации электронной почты, а пользователь не ввел надежный пароль, тогда вы предупреждаете пользователя об этом через окна сообщений.
Для создания окон сообщений в PyQt5
применяется виджет QMessageBox
, он опять таки принимает QMainWindow
в качестве параметра.
Проанализируйте следующий код:
import sys
from PyQt5 import QtWidgets
from PyQt5.QtWidgets import QApplication, QMainWindow, QLabel
def main():
app = QApplication(sys.argv)
win = QMainWindow()
win.setGeometry(400,400,400,300)
win.setWindowTitle("Pyqt5 Tutorial")
#Message Box
msg = QtWidgets.QMessageBox(win)
msg.setWindowTitle("Pyqt5 Alert")
msg.setText("Message box in Pyqt5!")
msg.exec_()
win.show()
sys.exit(app.exec_())
main()
Результат выполнения программы:
SetWindowTitle()
устанавливает заголовок для окна сообщения.
Также в окне сообщения всегда можно показать специальный значок, как показано в следующем коде и результате его выполнения:
msg = QtWidgets.QMessageBox(win)
msg.setWindowTitle("Pyqt5 Alert")
msg.setText("Message box in Pyqt5!")
msg.setIcon(QtWidgets.QMessageBox.Critical)
msg.exec_()
Результат выполнения программы:
Ниже приведен список допустимых для окон сообщений значков:
QMessageBox.Warning
QMessageBox.Critical
QMessageBox.Information
QMessageBox.Question
Выводы
Что же, руководство предоставило вам все необходимые знания для самостоятельного создания графических пользовательских интерфейсов на PyQt5
.
Читайте также:
- Пусть говорят… расходящиеся гистограммы!
- 5 способов выйти из вложенного цикла в Python
- Осваиваем веб-скрэпинг на Python
Читайте нас в Telegram, VK и Яндекс.Дзен
Перевод статьи Haider Imtiaz: Build Modern GUI in Python using PyQt5 Framework