PyQt5#
PyQt5 — это один из самых популярных фреймворков для создания графических интерфейсов (GUI) на языке Python. Он предоставляет мощные инструменты для создания десктопных приложений в ALSE.
Основные пакеты
Пакет |
Версия |
Репозиторий |
Описание |
---|---|---|---|
python3-pqt5 |
5.15.9+dfsg-1+b1 |
installation |
Библиотека PyQt5 |
Дополнительные пакеты
Пакет |
Версия |
Репозиторий |
Описание |
---|---|---|---|
qtcreator |
7.0.2-2astra2 |
extended |
IDE для разработки Qt, в состав входит Qt Designer |
python3-sqlalchemy |
1.4.46+ds1-1+b2 |
installation |
Библиотека абстракции базы данных (ORM) |
python3-psycopg2 |
2.9.5+b2 |
installation |
Адаптер базы данных PostgreSQL |
Примечание
В репозиториях большая часть пакетов, относящихся к PyQt5, имеют вид python3-pyqt5…
Установка PyQt5#
Пункт 1#
перед началом разработки необходимо установить PyQt5 и необходимые зависимости:
sudo apt install python3-pyqt5
Установка инструментов разработки:#
Пункт 1#
для разработки может необходимо установить qtqreator, которые включают в себя Qt Designer и другие утилиты:
sudo apt install qtcreator
Использование Qt Designer#
Qt Designer — это графический инструмент для создания интерфейсов пользователя. Вы можете использовать его для создания .ui файлов, которые затем можно загрузить в ваше приложение на PyQt5.
Пункт 1#
Запуск Qt Designer:
вы можете запустить Qt Designer следующей командой:
designer
Пункт 2#
Создание интерфейса:
в Qt Designer вы можете создавать интерфейсы, перетаскивая виджеты на форму. Сохраните ваш интерфейс в файл с расширением .ui, или конвертировать в файл с расширением .py и наследовать в приложении
Создание приложения на PyQt5 без использования Qt Designer#
Рассмотрим пример создания простого приложения с использованием PyQt5. Это приложение будет отображать окно с кнопкой, которая выводит сообщение при нажатии.
сохраните этот код в файл example.py:
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QVBoxLayout, QMessageBox
class MyApp(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
# Создаем кнопку
self.button = QPushButton('Нажми меня', self)
self.button.clicked.connect(self.on_button_clicked)
# Создаем вертикальный layout и добавляем кнопку
layout = QVBoxLayout()
layout.addWidget(self.button)
# Устанавливаем layout для основного окна
self.setLayout(layout)
# Настройки окна
self.setWindowTitle('PyQt5 Пример')
self.setGeometry(300, 300, 300, 200)
def on_button_clicked(self):
# Показываем сообщение при нажатии кнопки
QMessageBox.information(self, 'Сообщение', 'Вы нажали кнопку!')
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = MyApp()
ex.show()
sys.exit(app.exec_())
запустите файл:
python3 example.py
Вы увидите окно с кнопкой. При нажатии на кнопку появится сообщение.
Создание приложения на PyQt5 с использованием Qt Designer вариант 1#
Загрузка .ui файла в приложение: Вы можете загрузить .ui файл в ваше приложение с помощью uic модуля:
import sys
from PyQt5 import uic
from PyQt5.QtWidgets import QApplication, QWidget
class MyApp(QWidget):
def __init__(self):
super().__init__()
uic.loadUi('my_ui_file.ui', self)
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = MyApp()
ex.show()
sys.exit(app.exec_())
Создание приложения на PyQt5 с использованием Qt Designer вариант 2#
Преобразование .ui файла в Python-код и наследование в приложении
Пункт 1#
Создание .ui файла в Qt Designer
откройте Qt Designer и создайте интерфейс. Например, добавьте кнопку (QPushButton) и метку (QLabel).
сохраните интерфейс в файл, например, main_window.ui.
Пункт 2#
Преобразование .ui файла в Python-код
для использования .ui файла в PyQt5 его нужно преобразовать в Python-код, это можно сделать с помощью утилиты uic:
uic main_window.ui -o ui_main_window.py
Эта команда создаст файл ui_main_window.py, который содержит класс, описывающий интерфейс.
Пункт 3#
Наследование класса UI
теперь создадим основной класс приложения, который будет наследовать сгенерированный класс UI, пример структуры проекта:
project/
│
├── main.py # Основной файл приложения
├── main_window.ui # Файл интерфейса
└── ui_main_window.py # Сгенерированный файл из .ui
Содержимое ui_main_window.py (пример):
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(400, 300)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.pushButton = QtWidgets.QPushButton(self.centralwidget)
self.pushButton.setGeometry(QtCore.QRect(150, 100, 100, 30))
self.pushButton.setObjectName("pushButton")
self.label = QtWidgets.QLabel(self.centralwidget)
self.label.setGeometry(QtCore.QRect(150, 150, 100, 30))
self.label.setObjectName("label")
MainWindow.setCentralWidget(self.centralwidget)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
self.pushButton.setText(_translate("MainWindow", "Click Me"))
self.label.setText(_translate("MainWindow", "Hello"))
Основной класс приложения (main.py):
import sys
from PyQt5.QtWidgets import QApplication, QMainWindow
from ui_main_window import Ui_MainWindow # Импортируем сгенерированный класс
class MainWindow(QMainWindow, Ui_MainWindow):
def __init__(self):
super().__init__()
self.setupUi(self) # Настраиваем интерфейс
# Добавляем логику
self.pushButton.clicked.connect(self.on_button_clicked)
def on_button_clicked(self):
self.label.setText("Button clicked!")
if __name__ == "__main__":
app = QApplication(sys.argv)
window = MainWindow()
window.show()
sys.exit(app.exec_())
Пункт 4#
Объяснение кода
Импорт сгенерированного класса: Мы импортируем класс Ui_MainWindow из файла ui_main_window.py.
Наследование: Класс MainWindow наследует QMainWindow (базовый класс для главного окна) и Ui_MainWindow (класс с интерфейсом).
Инициализация интерфейса: В конструкторе вызывается метод setupUi(self), который настраивает интерфейс, созданный в Qt Designer.
Добавление логики: Мы добавляем обработчик события для кнопки (self.pushButton.clicked.connect), который изменяет текст метки.
Сборка и упаковка#
После того как ваше приложение готово, его нужно собрать и упаковать для распространения. Для этого можно использовать следующие инструменты:
Debian Package (.deb): Создание пакета для Debian. Используйте dpkg и dh_make для создания пакета.
PyInstaller: Инструмент для упаковки Python приложений в исполняемые файлы.