Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Industrial programming >> Python

Полное руководство по PyQt5: создание профессиональных GUI на Python

Что такое PyQt?

PyQt — Python-биндинг для фреймворка Qt, кроссплатформенной C++ библиотеки для создания нативных GUI-приложений на Windows, macOS, Linux, Android, iOS, Raspberry Pi и других. Биндинг поддерживается Riverbank Computing (UK), а сам Qt разрабатывается The Qt Company (Финляндия). PyQt даёт Python-разработчикам доступ к богатому набору виджетов Qt, сетевым возможностям, базам данных, 3D и мультимедиа.

В этом туториале вы узнаете:

Ключевые фичи PyQt5

PyQt5 предоставляет более 600 классов, охватывающих:

Эти возможности позволяют создавать сложные, высокопроизводительные десктопные и встраиваемые приложения. Крупные корпорации вроде LG, Mercedes-Benz, AMD, Panasonic и Harman полагаются на Qt для своих UI-стеков.

Версии PyQt

Riverbank Computing предлагает два основных биндинга:

Дополнительно PyQt3D предоставляет Python-биндинги для фреймворка Qt3D, полезного для рендеринга в реальном времени и симуляций.

Установка PyQt5

Описаны два распространённых метода установки. Рекомендуется использовать wheel-пакеты, так как они включают скомпилированные C++ бинарники и избегают длительных процессов сборки.

Метод 1: Установка через Wheels (рекомендуется)

  1. Откройте терминал или командную строку.
  2. Выполните pip install PyQt5 для скачивания wheel (~50 МБ).
  3. Убедитесь, что установка прошла успешно.

Пример на Windows:

Полное руководство по PyQt5: создание профессиональных GUI на Python
pip install PyQt5

После установки можно импортировать PyQt5.QtWidgets и начинать создавать приложения.

Метод 2: Сборка из исходников

Сборка из исходников сложнее, так как компилирует C++ код. Необходима только если нужны кастомные модификации или wheel для вашей платформы недоступен.

Основы программирования на PyQt5

Ниже — минимальный пример, открывающий окно 300×300 с заголовком «Guru99». Каждая строка прокомментирована.

import sys
from PyQt5.QtWidgets import QApplication, QWidget
if __name__ == "__main__":
    app = QApplication(sys.argv)
    w = QWidget()
    w.resize(300, 300)
    w.setWindowTitle("Guru99")
    w.show()
    sys.exit(app.exec_())

Пояснение:

Добавление интерактивности

Следующий пример добавляет метку, кнопку и сообщение, появляющееся при клике. Демонстрирует сигналы и слоты — ядро событийной системы Qt.

import sys
from PyQt5.QtWidgets import QApplication, QWidget, QLabel, QPushButton, QMessageBox
def dialog():
    mbox = QMessageBox()
    mbox.setText("Your allegiance has been noted")
    mbox.setDetailedText("You are now a disciple and subject of the all‑knowing Guru")
    mbox.setStandardButtons(QMessageBox.Ok | QMessageBox.Cancel)
    mbox.exec_()
if __name__ == "__main__":
    app = QApplication(sys.argv)
    w = QWidget()
    w.resize(300, 300)
    w.setWindowTitle("Guru99")
    label = QLabel("Behold the Guru, Guru99", w)
    label.move(100, 130)
    btn = QPushButton("Beheld", w)
    btn.move(110, 150)
    btn.clicked.connect(dialog)
    w.show()
    sys.exit(app.exec_())

Клик по кнопке вызывает dialog(), создающий модальный QMessageBox.

Основные компоненты и виджеты

Архитектура PyQt5 организована в несколько модулей. Понимание иерархии помогает импортировать только необходимое.

Обзор модулей

Частые виджеты

Управление компоновкой (Layout Management)

Вместо ручного позиционирования виджетов через move() и resize(), Qt предлагает менеджеры компоновки, автоматически расставляющие виджеты в зависимости от размера окна.

Box Layouts (HBox & VBox)

QHBoxLayout располагает виджеты горизонтально; QVBoxLayout — вертикально.

import sys
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QHBoxLayout, QVBoxLayout
app = QApplication([])
win = QWidget()
win.setWindowTitle("Musketeers")
btn1 = QPushButton("Athos")
btn2 = QPushButton("Porthos")
btn3 = QPushButton("Aramis")
hbox = QHBoxLayout(win)
hbox.addWidget(btn1)
hbox.addWidget(btn2)
hbox.addWidget(btn3)
win.show()
app.exec_()

Замените QHBoxLayout на QVBoxLayout для вертикального стека кнопок.

Grid Layout (Сеточная компоновка)

Организует виджеты в 2D-сетку. Метод addWidget() принимает индексы строки и столбца плюс опциональные row-span и column-span.

import sys
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QGridLayout
app = QApplication([])
win = QWidget()
layout = QGridLayout(win)
for i in range(3):
    for j in range(3):
        layout.addWidget(QPushButton(f"Button {i},{j}"), i, j)
win.show()
app.exec_()

Кастомные темы и стили

PyQt5 поддерживает нативные темы и кастомные стили.

Встроенные темы

Установите стиль приложения с app.setStyle("Fusion") или любой другой доступный стиль.

app = QApplication([])
app.setStyle("Fusion")

Кастомизация палитры

Используйте QPalette для программного изменения цветов виджетов.

from PyQt5.QtGui import QPalette
from PyQt5.QtCore import Qt
palette = QPalette()
palette.setColor(QPalette.ButtonText, Qt.black)
palette.setColor(QPalette.Window, Qt.black)
palette.setColor(QPalette.Button, Qt.gray)
app.setPalette(palette)

Qt Style Sheets (CSS-подобные)

Для продвинутого стилизирования применяйте stylesheets напрямую к виджетам или всему приложению.

btn.setStyleSheet("background-color: #4CAF50; color: white; padding: 5px;")

Ключевые выводы

Python

  1. Коллекции в C#: практическое руководство с реальными примерами
  2. Мастерство метода str.count() в Python: как подсчитывать символы и подстроки с примерами
  3. Мастерство строк форматирования format() в Python: понятные примеры
  4. Мастерство метода String.find() в Python: синтаксис, примеры и альтернативы
  5. Освоение лямбда-функций Python: практические примеры и лучшие практики
  6. Функция round() в Python: подробное объяснение с практическими примерами
  7. Освоение функции map() в Python: синтаксис, примеры и лучшие практики
  8. Python timeit(): измерение времени выполнения с практическими примерами
  9. Counter в collections Python: эффективное подсчёт, обновление и арифметические операции
  10. Понимание type() и isinstance() в Python: практические примеры