Основы 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.