Composants graphiques usuels avec Qt 5#
Après avoir abordé la gestion d’un composant graphique simple dans la page Premier bouton en Python avec Qt 5, nous allons considérer ici quelques autres composants graphiques usuels : la case à cocher, l”étiquette et le champ de texte.
Nous travaillons ici avec PyQt5, voir Introduction aux interfaces graphiques en Python avec Qt 5 et PyQt5.
Case à cocher - QCheckBox
#
Une case à cocher permet d’effectuer un choix (coché/non coché) pour une case. Elle est instanciée grâce à la classe QCheckBox
.
Présentation
- class QCheckBox(text)#
Case à cocher dont le constructeur reçoit un libellé qui sera affiché à côté de la case pour en préciser le rôle.
- Paramètres:
text (string) – libellé qui sera affiché à côté de la case
- checkState()#
Renvoie la valeur de l’état de la case
- Renvoie:
Qt.Checked
ouQt.Unchecked
- setCheckState(state)#
Fixe la valeur de l’état de la case.
- Paramètres:
state – état à prendre :
Qt.Checked
ouQt.Unchecked
Voir aussi
Exemple
import sys
from PyQt5.QtWidgets import QApplication, QCheckBox
app = QApplication.instance()
if not app:
app = QApplication(sys.argv)
# création de la case à cocher
case = QCheckBox("Voici ma premiere case a cocher")
# la case à cocher est rendue visible
case.show()
app.exec_()
Gestion d’une case à cocher#
On peut gérer une case à cocher de 2 façons :
en gérant une action sur la case
en cherchant à connaître son état (coché/non coché)
Gestion de l’action sur une case à cocher#
Chaque action de l’utilisateur sur une case à cocher déclenche un événement de changement d’état. Comme pour un bouton, sauf que cet événement est déclenché chaque fois que l” on coche ou décoche la case.
On va connecter le signal stateChanged de la classe QCheckBox
avec l’appel d’une fonction.
Exemple
import sys
from PyQt5.QtWidgets import QApplication, QCheckBox
# on définit une fonction à connecter au signal envoyé
def etat_change():
print("action sur la case")
app = QApplication.instance()
if not app:
app = QApplication(sys.argv)
# création de la case à cocher
case = QCheckBox("Voici ma premiere case a cocher")
# on connecte le signal "stateChanged" à la fonction "etat_change"
case.stateChanged.connect(etat_change)
# la case à cocher est rendue visible
case.show()
app.exec_()
Etat d’une case à cocher#
On peut connaître l”état d’une case à cocher en utilisant la méthode checkState()
de la classe QCheckBox
. On peut aussi changer l’état de la case en utilisant la méthode setCheckState()
.
Exemple
import sys
from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QCheckBox
class Fenetre(QWidget):
def __init__(self):
QWidget.__init__(self)
# création de la case à cocher
self.case = QCheckBox("Voici ma premiere case a cocher")
# on connecte le signal "stateChanged" à la méthode "etat_change"
self.case.stateChanged.connect(self.etat_change)
# création du gestionnaire de mise en forme
layout = QVBoxLayout()
# ajout de la case à cocher au gestionnaire de mise en forme
layout.addWidget(self.case)
# on fixe le gestionnaire de mise en forme de la fenêtre
self.setLayout(layout)
self.setWindowTitle("Ma fenetre")
# on définit une méthode à connecter au signal envoyé
def etat_change(self):
print("action sur la case")
if self.case.checkState() == Qt.Checked:
print("coche")
else:
print("decoche")
app = QApplication.instance()
if not app:
app = QApplication(sys.argv)
fen = Fenetre()
fen.show()
app.exec_()
Autre exemple
Il également possible de connaître l’état de la case au travers de l’argument transmis à la fonction qui est appelée.
import sys
from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import QApplication, QCheckBox
def etat_change(etat):
print("action sur la case")
if etat == Qt.Checked:
print("coche")
else:
print("decoche")
app = QApplication.instance()
if not app:
app = QApplication(sys.argv)
case = QCheckBox("Voici ma premiere case a cocher")
case.stateChanged.connect(etat_change)
case.show()
app.exec_()
Etiquette - QLabel
#
Une étiquette (en anglais label) est un composant de type QLabel
qui permet d’afficher un texte non éditable par l’utilisateur, mais que le programme peut faire évoluer.
Le constructeur de QLabel
précise le texte initial.
Présentation
- class QLabel(text)#
Etiquette dont le constructeur précise le texte initial.
- Paramètres:
text (string) – texte initial qui sera affiché
- setText(text)#
Modifie le texte de l’étiquette.
- Paramètres:
text – texte à afficher
Exemple
import sys
from PyQt5.QtWidgets import QApplication, QLabel
app = QApplication.instance()
if not app:
app = QApplication(sys.argv)
# création de l'étiquette
label = QLabel("Voici mon premier texte avec un QLabel")
# l'étiquette est rendue visible
label.show()
app.exec_()
Exemple avec modification du texte#
Le programme peut modifier à tout instant le texte d’un QLabel
à l’aide de la méthode setText()
.
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QVBoxLayout, QLabel
class Fenetre(QWidget):
def __init__(self):
QWidget.__init__(self)
self.n = 0 # attribut pour compter le nombre d'appui sur le bouton
# création du bouton
self.bouton = QPushButton("mon bouton avec une gestion d'appui")
# on connecte le signal "clicked" à la méthode "appui_bouton"
self.bouton.clicked.connect(self.appui_bouton)
# création de l'étiquette
self.label = QLabel("appui n = " + str(self.n))
# mise en place du gestionnaire de mise en forme
layout = QVBoxLayout()
layout.addWidget(self.bouton)
layout.addWidget(self.label)
self.setLayout(layout)
self.setWindowTitle("Ma fenetre")
# on définit une méthode à connecter au signal envoyé
def appui_bouton(self):
# on incrémente l'attribut "n" de 1
self.n = self.n + 1
# on utilise la méthode "setText" de QLabel pour fixer le texte
self.label.setText("appui n = " + str(self.n))
app = QApplication.instance()
if not app:
app = QApplication(sys.argv)
fen = Fenetre()
fen.show()
app.exec_()
Champ de texte - QLineEdit
#
Un champ de texte (aussi appelé champ de saisie de texte) est une zone de texte éditable dans laquelle l’utilisateur peut entrer ou modifier un texte. Il s’obtient en instanciant un objet de type QLineEdit
.
Présentation
- class QLineEdit(texte)#
Champ de texte avec un texte initial facultatif.
- Paramètres:
texte (string) – texte initial qui sera affiché
- text()#
Renvoie de le texte contenu dans le champ de texte.
- Renvoie:
texte contenu dans le champ de texte
- Type renvoyé:
string
Exemple
import sys
from PyQt5.QtWidgets import QApplication, QLineEdit
app = QApplication.instance()
if not app:
app = QApplication(sys.argv)
# création du champ de texte
champ = QLineEdit("Voici mon premier champ de texte")
# le champ de texte est rendu visible
champ.show()
app.exec_()
Exploitation usuelle d’un champ de texte#
On peut connaître à tout moment le texte contenu dans un champ de texte à l’aide de la méthode text()
.
Voici un exemple où on ajoute dans la fenêtre un bouton destiné à copier le contenu du champ de texte. Le prélèvement du texte se fera lors de l’action sur ce bouton.
Exemple :
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, \
QVBoxLayout, QLabel, QLineEdit
class Fenetre(QWidget):
def __init__(self):
QWidget.__init__(self)
# création du champ de texte
self.champ = QLineEdit()
# création du bouton
self.bouton = QPushButton("COPIE")
# on connecte le signal "clicked" à la méthode "appui_bouton_copie"
self.bouton.clicked.connect(self.appui_bouton_copie)
# création de l'étiquette
self.label = QLabel()
# mise en place du gestionnaire de mise en forme
layout = QVBoxLayout()
layout.addWidget(self.champ)
layout.addWidget(self.bouton)
layout.addWidget(self.label)
self.setLayout(layout)
self.setWindowTitle("Ma fenetre")
# on définit une méthode à connecter au signal envoyé
def appui_bouton_copie(self):
# la méthode "text" de QLineEdit permet d'obtenir le texte à copier
texte_a_copier = self.champ.text()
# la méthode "setText" de QLabel permet de changer
# le texte de l'étiquette
self.label.setText(texte_a_copier)
app = QApplication.instance()
if not app:
app = QApplication(sys.argv)
fen = Fenetre()
fen.show()
app.exec_()