coagul : Python et QT (tutoriel 5)
Créé par Jean-Emmanuel Bissey le 07/11/2025 modifié le 08/11/2025 PubliéRubrique : Débutants
Le : dimanche 2 avril 2006
Par : jibux
Visites : 25
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 :
Liens
Installer Python-Qt3 / QtDesigner sur Ubuntu Breezy 5.10Programmer en PyQt avec Eric3 / QtDesigner
Historique des modifications
Version Date Commentaire
0.1 26/03/2006 Création par Jibux