PyQt5#
PyQt5 — это один из самых популярных фреймворков для создания графических интерфейсов (GUI) на языке Python.
Он предоставляет мощные инструменты для создания десктопных приложений в ALSE.
Основные пакеты
Пакет |
Версия |
Репозиторий |
Описание |
|---|---|---|---|
python3-pyqt5 |
|
main |
Библиотека PyQt5 |
Дополнительные пакеты
Пакет |
Версия |
Репозиторий |
Описание |
|---|---|---|---|
qtcreator |
|
extended |
IDE для разработки Qt, в состав входит Qt Designer |
python3-sqlalchemy |
|
main |
Библиотека абстракции базы данных (ORM) |
python3-psycopg2 |
|
main |
Адаптер базы данных 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 приложений в исполняемые файлы.