Tvorba GUI pomocí PyQT 1/2

Podklady ke čtení

Instalace PyQT

V zásadě existují dvě možnosti, jak v Pythonu používat Qt framework: PyQt a PySide. Mají téměř totožné API, liší se v licenci a úrovni dokumentace.

python3 -m pip install --upgrade pip
python3 -m pip install PyQt5

První aplikace

from PyQt5 import QtWidgets
 
app = QtWidgets.QApplication([])
 
button = QtWidgets.QPushButton("Klikni na mě")
button.setWindowTitle("První aplikace")
button.clicked.connect(app.quit)
 
button.show()
 
app.exec()

GUI komponenty - widgety

Pro vykreslování GUI komponent slouží v Qt widgety.

Předhled komponent, použitých v příkladu (widgets_example.py)

Layouty

V aplikacích se zpravidla používá více komponent, které je třeba vhodným způsobem uspořádat. K tomu slouží layouty, zejména horizontální QHBoxLayout a vertikální QVBoxLayout.

Layout je nutné vložit do vhodného kontejneru - k tomu může dobře posloužit např. obecná třída QWidget.

from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QVBoxLayout
 
app = QApplication([])
 
window = QWidget()
 
layout = QVBoxLayout()
layout.addWidget(QPushButton('Top'))
layout.addWidget(QPushButton('Bottom'))
 
window.setLayout(layout)
window.show()
 
app.exec()

Stylování komponent

Komponenty lze v Qt stylovat pomocí jazyka podobnému CSS (Cascade StyleSheets), známému z HTML. Styl může být sdílen pro celou aplikaci (tj. např. pro množiny komponent), nebo nastaven zvlášť pro každý prvek.

from PyQt5.QtWidgets import QApplication, QPushButton
 
app = QApplication([])
app.setStyleSheet("QPushButton { margin: 10ex; }")
 
button = QPushButton('Hello World')
button.show()
 
app.exec()

Signály a sloty

from PyQt5.QtWidgets import *
 
app = QApplication([])
 
button = QPushButton('Click')
 
def on_button_clicked():
    alert = QMessageBox()
    alert.setText('You clicked the button!')
    alert.exec()
 
button.clicked.connect(on_button_clicked)
button.show()
 
app.exec()

Časovač

Časovač QTimer je komponenta určená k odměřování času, ať už v pravidelných intervalech nebo jednorázově (singleShot)

from PyQt5.QtWidgets import *

courses/bab37zpr/solutions/lab13.txt · Last modified: 2020/12/10 10:37 by viteks