PyQt6

Введение

PyQt6 - это набор привязок Python для фреймворка Qt версии 6. Он позволяет создавать графические пользовательские интерфейсы (GUI) с использованием Python. PyQt6 предоставляет обширный набор инструментов для разработки кросс-платформенных приложений с богатым функционалом.

Установка

Установить PyQt6 можно с помощью pip:

pip install PyQt6

Основы PyQt6

Вот простой пример PyQt6 приложения:


import sys
from PyQt6.QtWidgets import QApplication, QWidget, QLabel

class SimpleWindow(QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        self.setWindowTitle('Простое PyQt6 приложение')
        self.setGeometry(300, 300, 250, 150)
        label = QLabel('Привет, PyQt6!', self)
        label.move(50, 50)
        self.show()

if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = SimpleWindow()
    sys.exit(app.exec())
    

Виджеты

PyQt6 предоставляет множество виджетов для создания интерфейса:

Компоновка

PyQt6 предлагает несколько менеджеров компоновки для размещения виджетов:

Сигналы и слоты

PyQt6 использует механизм сигналов и слотов для обработки событий. Вот пример:


from PyQt6.QtWidgets import QApplication, QWidget, QPushButton
import sys

class Example(QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        btn = QPushButton('Нажми меня', self)
        btn.move(50, 50)
        btn.clicked.connect(self.on_click)
        
        self.setGeometry(300, 300, 250, 150)
        self.setWindowTitle('Сигналы и слоты')
        self.show()

    def on_click(self):
        print('Кнопка нажата!')

if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec())
    

Пример приложения

Вот пример более сложного приложения с использованием PyQt6:


import sys
from PyQt6.QtWidgets import QApplication, QMainWindow, QWidget, QVBoxLayout, QPushButton, QLabel, QLineEdit

class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("Пример PyQt6 приложения")
        self.setGeometry(100, 100, 300, 200)

        layout = QVBoxLayout()
        
        self.name_input = QLineEdit()
        layout.addWidget(self.name_input)
        
        self.greet_button = QPushButton("Поприветствовать")
        self.greet_button.clicked.connect(self.greet)
        layout.addWidget(self.greet_button)
        
        self.greeting_label = QLabel("")
        layout.addWidget(self.greeting_label)
        
        container = QWidget()
        container.setLayout(layout)
        self.setCentralWidget(container)

    def greet(self):
        name = self.name_input.text()
        if name:
            self.greeting_label.setText(f"Привет, {name}!")
        else:
            self.greeting_label.setText("Пожалуйста, введите имя.")

if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = MainWindow()
    window.show()
    sys.exit(app.exec())
    

Стилизация

PyQt6 позволяет настраивать внешний вид приложения с помощью таблиц стилей (CSS-подобный синтаксис):


app.setStyleSheet("""
    QPushButton {
        background-color: #4CAF50;
        border: none;
        color: white;
        padding: 15px 32px;
        text-align: center;
        text-decoration: none;
        font-size: 16px;
        margin: 4px 2px;
        cursor: pointer;
    }
    QLabel {
        font-size: 18px;
        color: #333;
    }
""")
    

Многопоточность

PyQt6 поддерживает многопоточность, что позволяет выполнять длительные операции без блокировки GUI:


from PyQt6.QtCore import QThread, pyqtSignal
import time

class Worker(QThread):
    finished = pyqtSignal(str)

    def run(self):
        # Имитация длительной операции
        time.sleep(5)
        self.finished.emit("Операция завершена!")

class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        self.init_ui()

    def init_ui(self):
        self.button = QPushButton('Запустить операцию', self)
        self.button.clicked.connect(self.start_operation)

    def start_operation(self):
        self.worker = Worker()
        self.worker.finished.connect(self.on_finished)
        self.worker.start()

    def on_finished(self, result):
        QMessageBox.information(self, "Результат", result)

    

Заключение

PyQt6 - мощный инструмент для создания графических интерфейсов в Python. Он предоставляет широкие возможности для разработки сложных приложений, включая кросс-платформенность, богатый набор виджетов, поддержку многопоточности и гибкие возможности стилизации.

Примечание: При переходе с PyQt5 на PyQt6 следует учитывать некоторые изменения в API. Рекомендуется ознакомиться с документацией по миграции для плавного перехода.

Для дальнейшего изучения PyQt6 рекомендуется ознакомиться с официальной документацией и попробовать создать несколько собственных приложений, постепенно усложняя их функциональность.