Основы PyQt5
PyQt5 предоставляет мощный инструмент для разработки GUI-приложений. Он поддерживает все основные платформы, такие как Windows, macOS и Linux. Работа начинается с создания объекта QApplication
, который управляет жизненным циклом приложения.
Минимальное приложение
Этот пример демонстрирует создание простого окна:
import sys
from PyQt5.QtWidgets import QApplication, QWidget
app = QApplication(sys.argv)
window = QWidget()
window.setWindowTitle("PyQt5 App")
window.resize(400, 300)
window.show()
sys.exit(app.exec_())
Метод app.exec_()
запускает главный цикл событий приложения.
Виджеты
Виджеты являются основными строительными блоками интерфейса пользователя. PyQt5 предлагает множество виджетов, включая кнопки, текстовые поля и списки.
Пример QLabel
Простой текстовый виджет:
from PyQt5.QtWidgets import QLabel, QWidget, QVBoxLayout, QApplication
from PyQt5.QtCore import Qt
import sys
app = QApplication(sys.argv)
window = QWidget()
layout = QVBoxLayout()
label = QLabel("Hello World!")
label.setAlignment(Qt.AlignCenter)
label.setStyleSheet("font-size: 20px;")
layout.addWidget(label)
window.setLayout(layout)
window.show()
sys.exit(app.exec_())
Виджет QLabel
позволяет отображать текст и изображения. Можно использовать стили для изменения внешнего вида текста.
Сигналы и Слоты
Механизм сигналов и слотов используется для обработки событий и взаимодействий между компонентами. Сигналы отправляются, когда происходят определенные действия, такие как нажатие кнопки.
Пример работы с сигналами и слотами
Соединение сигнала кнопки с функцией:
from PyQt5.QtWidgets import QPushButton, QApplication
from PyQt5.QtCore import pyqtSlot
import sys
app = QApplication(sys.argv)
button = QPushButton('Нажми меня!')
@pyqtSlot()
def on_click():
print('Кнопка нажата!')
button.clicked.connect(on_click)
button.show()
sys.exit(app.exec_())
Метод clicked.connect()
связывает событие нажатия кнопки с функцией on_click
. Эта функция становится "слотом" для сигнала.
Макеты
Макеты управляют расположением виджетов внутри окна приложения. Это позволяет избежать ручного позиционирования компонентов.
Пример использования QVBoxLayout
Создание вертикального расположения двух кнопок:
from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QPushButton
import sys
app = QApplication(sys.argv)
window = QWidget()
layout = QVBoxLayout()
button1 = QPushButton('Кнопка 1')
button2 = QPushButton('Кнопка 2')
layout.addWidget(button1)
layout.addWidget(button2)
window.setLayout(layout)
window.show()
sys.exit(app.exec_())
Макеты позволяют гибко управлять размещением элементов, поддерживая адаптацию интерфейса к размеру окна.
Стилизация
PyQt5 поддерживает стилизацию виджетов с помощью CSS-подобного синтаксиса, что позволяет улучшить внешний вид приложения.
Пример стилизации кнопки
Пример стилизации кнопки:
from PyQt5.QtWidgets import QApplication, QPushButton
import sys
app = QApplication(sys.argv)
button = QPushButton('Кнопка со стилем')
button.setStyleSheet("background-color: #4CAF50; color: white; font-size: 16px; padding: 10px;")
button.show()
sys.exit(app.exec_())
Стили можно задавать для любых виджетов с помощью метода setStyleSheet()
. Это позволяет быстро изменять внешний вид интерфейса.
Диалоги
Диалоги позволяют взаимодействовать с пользователем для ввода информации или выбора файлов. Это удобный способ запрашивать у пользователя данные.
Пример использования QMessageBox
Создание простого диалогового окна:
from PyQt5.QtWidgets import QApplication, QMessageBox
import sys
app = QApplication(sys.argv)
msg_box = QMessageBox()
msg_box.setText("Это простое сообщение.")
msg_box.exec_()
QMessageBox можно использовать для отображения предупреждений, сообщений и запросов. Поддерживаются различные иконки и кнопки.
Работа с файлами
PyQt5 предоставляет возможность выбора и открытия файлов через диалоги. Это позволяет легко загружать и сохранять данные.
Пример использования QFileDialog
Выбор файла с помощью диалогового окна:
from PyQt5.QtWidgets import QApplication, QFileDialog, QWidget
import sys
app = QApplication(sys.argv)
window = QWidget()
file_name, _ = QFileDialog.getOpenFileName(window, "Выберите файл", "", "Все файлы (*)")
if file_name:
print(f"Выбран файл: {file_name}")
sys.exit(app.exec_())
Диалог QFileDialog
позволяет пользователю выбирать файлы и папки. Это стандартный способ работы с файлами в PyQt5.