coagul : Python et QT (tutoriel 4)

Créé par Jean-Emmanuel Bissey le 07/11/2025 modifié le 08/11/2025 Publié

Rubrique : Programmation

Le : jeudi 23 mars 2006

Par : jibux 

Visites : 3007

Tags : Python, QT

Dans le tutoriel précédent, j’ai détaillé les fonctionnalités de l’application que nous allons commencer à réaliser.

Éléments abordés dans ce document

- Les listes « avec [] et les instructions for, in, if et les fonctions index() et append() »

- La gestion des exceptions « avec try, except, finally »

- La lecture d’un fichier texte « avec open(), readlines() et close() »

- L’utilisation d’une QListView

- Les expressions régulières « avec findall() »

- L’affectation multiple de variable « avec var1,var2=val1,val2 »

- L’encodage utf8 « avec unicode() »

Au travail

- Création de la ListView avec QT Designer

Explications des lignes du fichier myreadfile.py

2 lignes à mettre en tête des fichiers python


#!/usr/bin/env python

# -*- coding: iso-8859-15 -*-

Création des 4 items correspondant aux opérations


items=[]

items.append(QListViewItem(f.ExerciseListView,"Additions"))

items.append(QListViewItem(f.ExerciseListView,"Divisions"))

items.append(QListViewItem(f.ExerciseListView,"Multiplications"))

items.append(QListViewItem(f.ExerciseListView,"Soustractions"))

Lecture du fichier exercices.txt. On stocke les lignes du fichier dans la liste dataLines en éliminant les lignes de commentaire.


try:

    fsock = open('exercices.txt')

    try:

        dataLines = [line for line in fsock.readlines() if line[0]!='#']

    finally:

        fsock.close()

except IOError:

    pass

Les expressions régulières permettent d’isoler chaque élément d’une ligne du fichier. L’affectation multiple permet d’initialiser les variables en une seule opération.

On ajoute les valeurs extraites de dataline dans l’ items[] correspondant à l’opération. On récupère l’indice de l’opérateur grâce à la liste des opérateurs et la fonction index(). Il faut utiliser unicode() pour convertir les données lues du fichier en utf8.


for dataLine in dataLines:

    exercice, oorq, delai, question = re.findall("^([^\\t]+)\\t+([^\\t]+)\\t+(\\d+)\\t+(\\d+)",dataLine)[0]

    op1Min, op1Max, q1, operateur, op2Min, op2Max, q2, max, q3 = re.findall("^\\[([0-9]{1,3})..([0-9]{1,3})\\](_?)([+\\-*/])\\[([0-9]{1,3})..([0-9]{1,3})\\](_?)<=([0-9]{1,3})(_?)$", oorq)[0]

    items.append(QListViewItem(items[['+', '/', '*', '-'].index(operateur)], unicode(exercice,'utf8'), oorq, delai, question))

Il ne reste plus qu’à lancer


pyuic formreadfile.ui > formreadfile.py

python myreadfile.py

pour obtenir

Visualiser les exercices

texte - 1.9 ko

Le fichier exercices.txt

Celui-ci contient une série d’exercices. Les lignes commencant par # sont des commentaires. Ceux-ci sont notamment utilisés pour décrire le format du fichier.

Zip - 671 octets

Le formulaire

Zip - 752 octets

Le fichier myreadfile.py

Pour la suite, c’est ici

Historique des modifications

Version Date Commentaire

0.1 19/03/2006 Création par Jibux

0.2 26/11/2006 Ajout d’un lien vers l’article suivant

Galerie