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 предоставляет множество виджетов для создания интерфейса:
- QLabel: для отображения текста или изображений
- QPushButton: создает кнопку, которую можно нажать
- QLineEdit: однострочное текстовое поле для ввода
- QTextEdit: многострочное текстовое поле
- QCheckBox: для создания флажков
- QRadioButton: для создания переключателей
- QComboBox: выпадающий список
Компоновка
PyQt6 предлагает несколько менеджеров компоновки для размещения виджетов:
- QVBoxLayout: вертикальное размещение виджетов
- QHBoxLayout: горизонтальное размещение виджетов
- QGridLayout: размещение виджетов в сетке
- QFormLayout: размещение виджетов в форме
Сигналы и слоты
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 рекомендуется ознакомиться с официальной документацией и попробовать создать несколько собственных приложений, постепенно усложняя их функциональность.