Marc Silanus
PyQt est un module libre qui permet de lier le langage Python avec la bibliothèque Qt distribué sous deux licences : une commerciale et la GNU GPL. Il permet ainsi de créer des interfaces graphiques en Python. Une extension de QtDesigner (utilitaire graphique de création d’interfaces Qt) permet de générer le code Python d’interfaces graphiques.
Wikipedia - https://fr.wikipedia.org/wiki/PyQt
ESA, Nokia, Nasa, Adobe, Motorola, Google, …
Il gère :
Il gère les widgets qui constituent l’interface graphique
Lorsqu’une action est effectuée sur un widget (click, survol, …) un évènement est généré et un signal est envoyé à l’IHM.
Un Slot est une méthode de l’IHM. Si un signal est connecté à un Slot, il sera exécuté.
Les widgets possèdent déjà des signaux/slots mais le programmeur peut définir les siens
Si vous avez installé Anaconda et/ou pycharm, vous avez déjà PyQt et QtDesigner
sinon :
$ sudo apt-get install python3-pyqt5
$ sudo apt-get install qttools5-dev-tools
Lancement :
$ designer
Pour une IHM : Créer Main Window
Glisser/Déplasser les widgets
Connecter Signal/Slot
Enregistrer au format .ui et transformer en .py
Générer la classe UI_MainWindow :
$ pyuic5 clickmoi.ui -o clickmoi.py
Avec le main pour l’exécuter :
$ pyuic5 -x clickmoi.ui -o clickmoi.py
$ python3 clickmoi.py
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(528, 288)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.pushButton = QtWidgets.QPushButton(self.centralwidget)
...
avec l’option -x :
Ne pas oublier de régénerer le .py avec pyuic5
Nouveau script python
# le nom de la classe n'a pas d'importance
class applicationIHM(QtWidgets.QMainWindow):
# son constructeur
def __init__(self):
super(applicationIHM, self).__init__()
# on instancie un objet de classe Ui_MainWindow
self.ui = Ui_MainWindow()
# on invoque son constructeur
self.ui.setupUi(self)
# Definition de mes slots personnels
def monSlot(self):
self.ui.label_2.setText("Me revoilà...")
https://www.riverbankcomputing.com/static/Docs/PyQt5/index.html