4SI
Sommaire
- Fichier texte dans une ListWidget
- Tableau rempli avec setItem()
- Tableau rempli avec insertRow()
- Fichier binaire, taille inconnue
- Fichier binaire, taille connue
- Matrice NL × NC
- Points clés à retenir
- 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 queinsertRow()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). AjouterinsertRow(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.

