Skip to Content

Python et QT (tutoriel 4)

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

    PNG - 16.7 ko
    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
  • Fichier attachéTaille
    editListview.png21.42 Ko
    Le fichier exercices.txt1.99 Ko
    Le formulaire671 octets
    Visualiser les exercices16.7 Ko
    Le fichier myreadfile.py752 octets

    Commentaires

    > Python et QT (tutoriel 4)

    RAS pour le fond. Nickel pour moi.

    J’ai juste trouvé une seule coquille dans le tout premier paragraphe :

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