Guide PyQt5 : widgets, signaux et slots en Python

Telechargé par Habli Rania
PyQt5 - Widgets, signaux et slots | page 1
PyQt5
Guide des widgets, signaux et slots
Pour chaque widget : les signaux possibles, les slots, et comment les utiliser
Sommaire
1. Principe signal / slot 2. Les 3 facons de connecter 3. Les widgets (un par un) 4. Tableau
recapitulatif 5. Erreurs frequentes
Widget Widget Widget
QPushButton QLabel QLineEdit
QTextEdit QComboBox QCheckBox
QRadioButton QSpinBox QSlider
QListWidget QTreeView QTableWidget
QGroupBox QAction (menu) QMessageBox
PyQt5 - Widgets, signaux et slots | page 2
1. Le principe signal / slot
Signal : un evenement emis par un widget (clic, texte modifie, valeur changee...).
Slot : une fonction Python qui s'execute quand le signal est emis.
connect : la ligne qui relie le signal au slot.
widget . signal . connect ( slot )
| | |
le widget l'evenement la fonction a executer (SANS parentheses)
Exemple : self.pushBtnOK.clicked.connect(self.onPushBtnOKClicked)
Ou placer le code ?
class Biblio(Ui_MainWindow, QMainWindow):
def __init__(self):
QMainWindow.__init__(self)
self.setupUi(self) # 1) cree les widgets
# 2) les connexions : TOUJOURS dans __init__, APRES setupUi
self.pushBtnOK.clicked.connect(self.onPushBtnOKClicked)
# 3) le slot : une methode de la classe
def onPushBtnOKClicked(self):
print("clic !")
2. Les 3 facons de connecter
A) Slot simple (sans parametre)
self.pushBtnOK.clicked.connect(self.onOK)
def onOK(self):
print("OK")
B) Slot qui recoit la valeur envoyee par le signal
self.spinBox.valueChanged.connect(self.onValeur)
def onValeur(self, valeur): # 'valeur' = la nouvelle valeur du spinBox
print(valeur)
C) Slot avec un argument a vous (lambda)
self.pushBtn1.clicked.connect(lambda: self.afficher("Bouton 1"))
self.pushBtn2.clicked.connect(lambda: self.afficher("Bouton 2"))
def afficher(self, texte):
QMessageBox.information(self, "Info", texte)
Astuce : un meme slot pour plusieurs boutons
self.pushBtn1.clicked.connect(self.onBoutonClique)
self.pushBtn2.clicked.connect(self.onBoutonClique)
def onBoutonClique(self):
bouton = self.sender() # le bouton qui a ete clique
print(bouton.objectName(), bouton.text())
PyQt5 - Widgets, signaux et slots | page 3
3. Les widgets, un par un
Pour tous les exemples : les noms (pushBtnOK, lineEditTitre...) sont les objectName definis dans Qt
Designer. Remplacez-les par les votres. Les imports necessaires : from PyQt5.QtWidgets import
QMessageBox
QPushButton (bouton)
Un bouton sur lequel on clique. C'est le widget le plus utilise pour declencher une action.
Signaux possibles (ce qui peut declencher un slot)
Signal Quand ? Le slot recoit
clicked L'utilisateur clique (le plus utilise) rien (ou checked)
pressed Le bouton est enfonce rien
released Le bouton est relache rien
toggled(bool) Etat change (si setCheckable(True)) True / False
Methodes utiles dans le slot
Methode Role
setText(t) / text() Change / lit le texte du bouton
setEnabled(False) Desactive le bouton (grise)
setVisible(False) Cache le bouton
setCheckable(True) / isChecked() Bouton a 2 etats (enfonce / non)
setToolTip(t) Texte d'aide au survol
Exemple complet
self.pushBtnOK.clicked.connect(self.onOK)
def onOK(self):
QMessageBox.information(self, "Info", "Vous avez clique sur OK")
QLabel (texte affiche)
Affiche un texte ou une image. L'utilisateur ne peut pas le modifier. Il sert surtout a AFFICHER un resultat
depuis un slot.
Signaux possibles (ce qui peut declencher un slot)
Signal Quand ? Le slot recoit
linkActivated(str) Clic sur un lien HTML dans le texte l'adresse du lien
Methodes utiles dans le slot
Methode Role
setText(t) / text() Change / lit le texte
setPixmap(QPixmap(...)) Affiche une image
setStyleSheet("color: red") Change la couleur, la police...
clear() Efface le contenu
Exemple complet
PyQt5 - Widgets, signaux et slots | page 4
# Un label ne declenche presque rien : on le modifie depuis le slot d'un bouton
self.pushBtnOK.clicked.connect(self.onOK)
def onOK(self):
self.labelResultat.setText("Bonjour " + self.lineEditNom.text())
QLineEdit (champ de saisie, une ligne)
Permet a l'utilisateur de taper un texte court (nom, titre, mot de passe...).
Signaux possibles (ce qui peut declencher un slot)
Signal Quand ? Le slot recoit
textChanged(str) Le texte change (meme par programme) le nouveau texte
textEdited(str) L'utilisateur tape au clavier le nouveau texte
returnPressed Touche Entree appuyee rien
editingFinished Entree appuyee OU le champ perd le focus rien
Methodes utiles dans le slot
Methode Role
text() Lit le texte saisi
setText(t) Ecrit un texte dans le champ
clear() Vide le champ
setPlaceholderText(t) Texte grise indicatif
setReadOnly(True) Lecture seule
setEchoMode(QLineEdit.Password) Cache les caracteres (mot de passe)
setFocus() Place le curseur dans le champ
Exemple complet
self.lineEditTitre.textChanged.connect(self.onTitreChange)
self.lineEditTitre.returnPressed.connect(self.onEntree)
def onTitreChange(self, texte): # recoit le nouveau texte
self.labelApercu.setText(texte)
def onEntree(self):
QMessageBox.information(self, "Info", "Titre : " + self.lineEditTitre.text())
QTextEdit (zone de texte, plusieurs lignes)
Comme QLineEdit mais pour un texte long (plusieurs lignes).
Signaux possibles (ce qui peut declencher un slot)
Signal Quand ? Le slot recoit
textChanged Le contenu change rien
cursorPositionChanged Le curseur se deplace rien
Methodes utiles dans le slot
PyQt5 - Widgets, signaux et slots | page 5
Methode Role
toPlainText() Lit tout le texte
setPlainText(t) Remplace tout le texte
append(t) Ajoute une ligne a la fin
clear() Vide la zone
setReadOnly(True) Lecture seule (utile pour un journal)
Exemple complet
self.pushBtnAjouter.clicked.connect(self.onAjouter)
def onAjouter(self):
self.textEditLog.append("Livre : " + self.lineEditTitre.text())
QComboBox (liste deroulante)
Liste deroulante : l'utilisateur choisit UN element parmi plusieurs.
Signaux possibles (ce qui peut declencher un slot)
Signal Quand ? Le slot recoit
currentIndexChanged(int) Le choix change le numero (0, 1, 2...)
currentTextChanged(str) Le choix change le texte choisi
activated(int) L'utilisateur choisit (meme le meme element) le numero
Methodes utiles dans le slot
Methode Role
addItem(t) / addItems([...]) Ajoute un ou plusieurs elements
currentText() Texte de l'element choisi
currentIndex() Numero de l'element choisi
setCurrentIndex(i) Choisit un element par son numero
removeItem(i) / clear() Supprime un element / tout
Exemple complet
# Dans __init__ :
self.comboCategorie.addItems(["Roman", "Science", "Histoire"])
self.comboCategorie.currentTextChanged.connect(self.onCategorie)
def onCategorie(self, texte): # recoit le texte choisi
self.labelInfo.setText("Categorie : " + texte)
QCheckBox (case a cocher)
Case que l'on coche / decoche. Plusieurs cases peuvent etre cochees en meme temps.
Signaux possibles (ce qui peut declencher un slot)
Signal Quand ? Le slot recoit
toggled(bool) Coche ou decoche True (cochee) / False
1 / 12 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans l'interface ou les textes ? Ou savez-vous comment améliorer l'interface utilisateur de StudyLib ? N'hésitez pas à envoyer vos suggestions. C'est très important pour nous!