L’interface graphique PyQt — résumé 4SI

4SI

Sommaire

  1. Fichier texte dans une ListWidget
  2. Tableau rempli avec setItem()
  3. Tableau rempli avec insertRow()
  4. Fichier binaire, taille inconnue
  5. Fichier binaire, taille connue
  6. Matrice NL × NC
  7. Points clés à retenir
  8. Annexe — Qt Designer

1. Fichier texte dans une ListWidget

Objectif : Lire un fichier texte ligne par ligne et ajouter chaque ligne à une liste Widget (QListWidget).

# Ouvrir le fichier en mode lecture
f = open("nom_f.txt", "r")
ch = f.readline()

while ch != "":
    ch = ch[:len(ch)-1]  # Suppression du '\n'
    w.nom_liste.addItem(ch)
    ch = f.readline()

f.close()

Remarque. ch[:len(ch)-1] suppose que chaque ligne se termine par un retour à la ligne. Si la dernière ligne du fichier n’en a pas, elle perd son dernier caractère (« Sami » devient « Sam »).

2. Tableau rempli avec setItem()

Objectif : Remplir un tableau en définissant d’abord le nombre de lignes avec setRowCount().

# Définir le nombre de lignes
w.nom_tw.setRowCount(n)

for i in range(n):
    # Colonne 0 : Champ numérique (conversion en string)
    w.nom_tw.setItem(i, 0, QTableWidgetItem(str(t[i]["champ numérique"])))

    # Colonne 1 : Champ de type chaîne
    w.nom_tw.setItem(i, 1, QTableWidgetItem(t[i]["champ de type chaine"]))

3. Tableau rempli avec insertRow()

Objectif : Remplir un tableau en insérant les lignes une par une avec insertRow().

# Initialiser le tableau à 0 lignes
w.nom_tw.setRowCount(0)

for i in range(n):
    # Insérer une nouvelle ligne à la position i
    w.nom_tw.insertRow(i)

    # Remplir les cellules
    w.nom_tw.setItem(i, 0, QTableWidgetItem(str(t[i]["champ numérique"])))
    w.nom_tw.setItem(i, 1, QTableWidgetItem(t[i]["champ de type chaine"]))

Différence : setRowCount() fixe le nombre total de lignes au départ, tandis que insertRow() ajoute les lignes progressivement.

4. Fichier binaire, taille inconnue

Objectif : Charger des enregistrements depuis un fichier binaire (.dat) sans connaître le nombre d’enregistrements à l’avance.

from pickle import load

# Ouvrir le fichier en mode binaire
f = open("nom_f.dat", "rb")
w.nom_tw.setRowCount(0)
i = 0
eof = False

while not(eof):
    try:
        # Charger un enregistrement
        e = load(f)
        w.nom_tw.insertRow(i)
        w.nom_tw.setItem(i, 0, QTableWidgetItem(str(e["champ numérique"])))
        w.nom_tw.setItem(i, 1, QTableWidgetItem(e["champ de type chaine"]))
        i = i + 1
    except:
        # Fin du fichier atteinte
        eof = True

f.close()

5. Fichier binaire, taille connue

Objectif : Charger des enregistrements depuis un fichier binaire lorsque le nombre d’enregistrements est connu.

from pickle import load

# Ouvrir le fichier en mode binaire
f = open("nom_f.dat", "rb")
w.nom_tw.setRowCount(n)

for i in range(n):
    # Charger un enregistrement
    e = load(f)
    w.nom_tw.setItem(i, 0, QTableWidgetItem(str(e["champ numérique"])))
    w.nom_tw.setItem(i, 1, QTableWidgetItem(e["champ de type chaine"]))

f.close()

Attention : les n lignes existent déjà grâce à setRowCount(n). Ajouter insertRow(i) dans la boucle donnerait 2n lignes, dont n vides.

6. Matrice NL × NC

Objectif : Remplir un tableau à double dimension (matrice m) dans un QTableWidget.

# Définir les dimensions du tableau
w.nom_tw.setRowCount(NL)      # Nombre de lignes
w.nom_tw.setColumnCount(NC)   # Nombre de colonnes

for i in range(NL):
    for j in range(NC):
        # Remplir chaque cellule avec l'élément m[i][j]
        w.nom_tw.setItem(i, j, QTableWidgetItem(str(m[i][j])))

7. Points clés à retenir

  • QTableWidgetItem : Objet nécessaire pour insérer des données dans les cellules d’un tableau
  • str() : Conversion obligatoire pour afficher des données numériques dans le tableau
  • setRowCount() vs insertRow() : Deux approches pour gérer les lignes (définir au départ vs ajouter progressivement)

8. Annexe — Qt Designer

Remarque : Les propriétés et méthodes mentionnées sont conformes au programme officiel (Septembre 2024).

Label

  • setText : Modifie le texte de l’étiquette.

TextEdit

  • toPlainText : Renvoie le texte contenu dans le champ de texte.
  • setText : Modifie le texte du champ par celui en argument.
  • clear : Efface le contenu du champ de texte.

LineEdit

  • text : Renvoie le texte contenu dans le champ de texte.
  • setText : Modifie le contenu du champ de texte par le texte fourni en argument.
  • clear : Efface le contenu du champ de texte.

PushButton

  • clicked, connect : Déclenche une action ou un événement spécifique lorsqu’il est pressé.

ComboBox

  • currentText : Retourne la chaîne de caractères actuellement sélectionnée.

RadioButton

  • isChecked : Renvoie Vrai si ce bouton spécifique est sélectionné, sinon Faux.

CheckBox

  • isChecked : Renvoie Vrai si la case est cochée, sinon Faux.

ListWidget

  • addItem : Ajoute un objet ou une chaîne à la liste.
  • clear : Vide la liste.

TableWidget

  • setItem : Ajoute des données à une table.
  • QTableWidgetItem : Ajoute un contenu à une cellule.
  • insertRow : Insère une ligne.

QMessageBox

  • critical : Affiche un message d’erreur.

Pour aller plus loin : les cours Les fichiers — 4SI et Les enregistrements — 4SI.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *