Skip to Content

Python et QT (tutoriel 5)

Dans le tutoriel précédent, j’ai détaillé la création d’une QListView utilisée pour lire le fichier d’exercices. Nous allons intégrer ces fonctions dans le formulaire présenté dans le tutoriel 3.

Éléments abordés dans ce document

  •  Utilisation de l’IDE Eric

    Au travail

    Dans l’IDE Eric (il est important de l’avoir installé et configuré comme indiqué ici

  •  Projet/Nouveau : pour créer un nouveau projet nommé revcal
  •  Projet/Ajouter fichier : pour ajouter le fichier mainform.ui
  •  Compiler le formulaire avec un clic droit sur le fichier mainform.ui présent dans l’onglet des formulaires. Une boite de dialogue apparaît pour signaler le succès de l’opération. Dans l’onglet des sources apparaît maintenant le fichier mainform.py
  •  Générer une sous-classe avec un clic droit sur le fichier mainform.ui en acceptant le nom proposé par défaut (MainForm_Impl).
  •  Sauver le fichier en l’appelant mainform_impl.py
  •  Ajouter ce fichier dans les sources du projet
  •  Créer un nouveau fichier qu’on appellera revcal.py. Celui-ci contiendra les lignes suivantes :

    # !/usr/bin/env python

    import sys
    from qt import *
    from mainform_impl import MainForm_Impl

    # create Qt application
    app = QApplication(sys.argv)

    # create and show Qt form
    form = MainForm_Impl()
    form.show()

    # enter Qt event-handling loop
    app.exec_loop()

  •  Ajouter ce fichier dans les sources du projet
  •  Désigner ce fichier comme étant le fichier principal du projet dans Projet/propriétés
  •  lancer le programme avec la touche F2 puis en cliquant sur OK. Magnifique, non ?

    Il serait vraiment dommage de s’arrêter en si bon chemin. On va donc ajouter le code correspondant à la lecture du fichier d’exercices vu dans le tutoriel précédent. Celui-ci prendra tout naturellement place dans la fonction init() du fichier MainForm_Impl.py


    def init(self):
           items=[]
           items.append(QListViewItem(self.ExerciseListView,"Additions"))
           items.append(QListViewItem(self.ExerciseListView,"Divisions"))
           items.append(QListViewItem(self.ExerciseListView,"Multiplications"))
           items.append(QListViewItem(self.ExerciseListView,"Soustractions"))

           try:
               fsock = open('exercices.txt')
               try:
                   dataLines = [line for line in fsock.readlines() if line[0]!='#']
               finally:
                   fsock.close()
           except IOError:
               pass

           try:
               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))
           except NameError:
               pass

  •  Lancer à nouveau le programme avec la touche F2 puis en cliquant sur OK vous obtiendrez ceci :

  •  A ce stade, les plus perspicaces d’entre vous devraient s’interroger. Comment se fait-il qu’un clic sur une ligne d’exercice remplisse les zones de saisie situées dans la partie supérieure du formulaire ?

    En fait il suffit de rajouter le code suivant dans la fonction SelectExerciseSlot


       def SelectExerciseSlot(self):
           exercise=self.ExerciseListView.currentItem().text(1).ascii()
           if exercise:
               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})(_?)$", exercise)[0]
               self.MinOp1LineEdit.setText(op1Min)
               self.MaxOp1LineEdit.setText(op1Max)
               self.OperateurComboBox.setCurrentItem(['*', '+', '-', '/'].index(operateur))
               self.MinOp2LineEdit.setText(op2Min)
               self.MaxOp2LineEdit.setText(op2Max)
               self.ResultatMaxLineEdit.setText(max)
               self.PositionLineEdit.setText(`(q1=='_')+(q2=='_')*2+(q3=='_')*4`)
               self.CountLineEdit.setText(self.ExerciseListView.currentItem().text(3).ascii())
               self.DelaiLineEdit.setText(self.ExerciseListView.currentItem().text(2).ascii())
           else:
               operateur=self.ExerciseListView.currentItem().text(0).ascii()
               self.OperateurComboBox.setCurrentItem(['Multiplications', 'Additions', 'Soustractions', 'Divisions'].index(operateur))

    Tous les fichiers de ce tutoriel sont dans l’archive suivante :

    Zip - 43.9 ko

    Liens

    Installer Python-Qt3 / QtDesigner sur Ubuntu Breezy 5.10

    Programmer en PyQt avec Eric3 / QtDesigner

    Pour la suite, c’est ici

    Historique des modifications

    Version Date Commentaire
    0.1 26/03/2006 Création par Jibux
    0.2 26/11/2006 Ajout d’un lien vers l’article suivant
  • Fichier attachéTaille
    revcal-2.jpg49.13 Ko
    revcal.zip43.94 Ko