Как создать простое приложение PyQt в Python
В этом уроке мы создадим простое приложение PyQt, которое отображает сообщение Hello World в Python.
- Установка пакета PyQt
- Создание первой PyQt-программы
- Введение в цикл событий
- Поддержка аргумента командной строки и кода возврата
- Создание шаблона программы Qt
Установка пакета PyQt
PyQt — это привязка Python к кроссплатформенному прикладному инструменту Qt. Поскольку PyQt — это сторонний пакет, перед использованием его необходимо установить.
PyQt6 — последняя версия PyQt на момент написания этого руководства. Чтобы установить PyQt6 с помощью PyPI в Windows, используйте следующую команду pip:
pip install PyQt6
Если вы используете macOS или Linux, вам необходимо использовать команду pip3:
pip3 install PyQt6
Создание первой PyQt-программы
Следующая программа выводит на экран окно с заголовком Hello World:
from PyQt6.QtWidgets import QApplication, QWidget # create the QApplication app = QApplication([]) # create the main window window = QWidget(windowTitle='Hello World') window.show() # start the event loop app.exec()
Для запуска приложения используйте команду python:
python main.py
Если вы используете macOS или Linux, вы можете использовать команду python3:
python3 main.py
Ниже показано окно:
Как это работает.
- Сначала импортируйте классы QApplication и QMainWidget из PyQt6.Widgets:
from PyQt6.QtWidgets import QApplication, QWidget
- Во-вторых, создайте объект QApplication:
app = QApplication(sys.argv)
Каждому приложению PyQt требуется один и только один объект QApplication.
- В-третьих, создайте новый экземпляр QWidget с заголовком «Hello World» и вызовите метод show() для отображения окна:
window = QWidget(windowTitle='Hello World') window.show()
- Наконец, вызовите метод exec() экземпляра QMainApplication, чтобы запустить цикл событий:
app.exec()
Введение в цикл событий
Каждому приложению PyQt нужен один экземпляр класса QApplication. Объект QApplication содержит цикл событий приложения. Цикл событий отвечает за управление всеми событиями приложения, включая взаимодействие пользователя с графическим интерфейсом.
Когда вы взаимодействуете с приложением Qt, например, нажимая клавишу или кнопку, PyQt генерирует событие и помещает его в очередь событий.
Цикл событий постоянно проверяет очередь событий. Если цикл событий находит событие, он пересылает его определенному обработчику событий. Обработчик событий обрабатывает событие и передает управление обратно в цикл событий для обработки следующих событий.
На следующем рисунке показано, как работает цикл событий:
Обратите внимание, что каждое приложение PyQt имеет один и только один цикл событий.
Поддержка аргумента командной строки и кода возврата
Программа PyQt может принимать один или несколько аргументов командной строки. Чтобы включить это, вам нужно передать argv из модуля sys в QApplication следующим образом:
app = QApplication(sys.argv)
App.exec() возвращает 0 в случае успеха или другое значение в случае неудачи.
Если программа PyQt запускается из оболочки, т. е. из командной строки в Windows или из терминала в macOS и Linux, она должна вернуть код, указывающий на успешное или неудачное выполнение программы.
Для этого необходимо вызвать функцию sys.exit() и передать ей результат app.exec() следующим образом:
sys.exit(app.exec())
Сделав это, Shell может получить код возврата от приложения PyQt.
Ниже показана пересмотренная программа Hello World:
import sys from PyQt6.QtWidgets import QApplication, QWidget # create the QApplication app = QApplication(sys.argv) # create the main window window = QWidget(windowTitle='Hello World') window.show() # start the event loop sys.exit(app.exec())
Создание шаблона программы Qt
Ниже показана PyQt Hello World в объектно-ориентированном виде:
Обратите внимание: если вы не знакомы с объектно-ориентированным программированием, вы можете воспользоваться руководством по ООП в Python.
import sys from PyQt6.QtWidgets import QApplication, QWidget class MainWindow(QWidget): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) # set the window title self.setWindowTitle('Hello World') # show the window self.show() if __name__ == '__main__': app = QApplication(sys.argv) # create the main window window = MainWindow() # start the event loop sys.exit(app.exec())
Как это работает.
- Сначала определите класс MainWindow, который наследуется от QWiget:
class MainWindow(QWidget): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) # set the window title self.setWindowTitle('Hello World') # show the window self.show()
В методе __init__() мы задаем заголовок окна и вызываем метод show() для отображения окна.
- Далее добавьте блок if __name__ == ‘__main__’, чтобы включить код, если программа выполняется напрямую. Если скрипт импортируется как модуль, код в этом блоке не будет выполнен.
if __name__ == '__main__':
- Затем создайте объект QApplication:
app = QApplication(sys.argv)
- После этого создайте новый экземпляр MainWindow:
window = MainWindow()
- Наконец, запустите цикл событий:
sys.exit(app.exec())