Перейти к основному содержимому

Первая программа на PyQt6

Разработчику Архитектору

Первая программа на PyQt6

Соберём окно-конвертер температуры на PyQt6 (аналогично для PySide6: замените PyQt6PySide6 в импортах).

Сравнение GUI-стеков: PyQt, PySide и Flet.


Установка

python -m venv venv
source venv/bin/activate # Windows: venv\Scripts\activate
pip install PyQt6

Код

converter.py:

import sys

from PyQt6.QtWidgets import (
QApplication,
QLabel,
QLineEdit,
QMainWindow,
QMessageBox,
QPushButton,
QVBoxLayout,
QWidget,
)


class MainWindow(QMainWindow):
def __init__(self) -> None:
super().__init__()
self.setWindowTitle("Конвертер °C → °F")

self.input = QLineEdit()
self.input.setPlaceholderText("Температура в °C")

self.result = QLabel("—")

btn = QPushButton("Перевести")
btn.clicked.connect(self.convert)

layout = QVBoxLayout()
layout.addWidget(self.input)
layout.addWidget(btn)
layout.addWidget(self.result)

container = QWidget()
container.setLayout(layout)
self.setCentralWidget(container)

def convert(self) -> None:
text = self.input.text().strip().replace(",", ".")
try:
c = float(text)
except ValueError:
QMessageBox.warning(self, "Ошибка", "Введите число")
return
f = c * 9 / 5 + 32
self.result.setText(f"{c:.1f} °C = {f:.1f} °F")


def main() -> None:
app = QApplication(sys.argv)
window = MainWindow()
window.resize(320, 160)
window.show()
sys.exit(app.exec())


if __name__ == "__main__":
main()

Запуск:

python converter.py

Сигналы и слоты

В Qt кнопка испускает сигнал clicked; метод convertслот:

btn.clicked.connect(self.convert)

Это событийная модель Qt (сравните с command= в Tkinter).


Designer (опционально)

Qt Designer рисует .ui XML; загрузка:

from PyQt6 import uic
self.ui = uic.loadUi("mainwindow.ui", self)

Для крупных форм удобнее визуальный редактор, логику оставляют в Python.


Дальше

  • QTableWidget, QThread для фоновых задач;
  • упаковка: PyInstaller, briefcase;
  • лицензия PyQt в коммерческих продуктах — см. сайт Riverbank.

См. также

Другие статьи этого же раздела в боковом меню (как на странице «О разделе»).