 python et qt tutoriel 7  dans le tutoriel précédent  nous avons révisé nos connaissances sur l ide eric en créant une petite application qui manipulait une barre de progression avec un timer nous allons utiliser ces élements pour compléter l application que nous avons commencé dans le tutoriel 5  éléments abordés dans ce document  l evaluation d expression avec eval les afficheurs lcd de qt avec display l affichage de boîte de dialogue avec qmessageboxinformation des propriétés supplémentaires associées aux widgets qt avec setreadonly setfocus le module time avec time  au travail on rajoute la fonction nouveaunombres  à notre classe mainformimpl celleci va tirer des nombres au hasard en respectant les limites imposées pour l exercice elle se charge également de l affichage et des modifications des zones de saisie cette fonction sera appelée une première fois par la fonction startslot  et ensuite par la fonction testreponseslot  jusqu à la fin de l exercice la fonction startslot  est appelée lorsque l utilisateur clique sur le bouton qui permet de commencer l exercice elle est chargée d initialiser les paramètres liés à l exercice et notamment le timer qui va rythmer le tout la fonction testreponseslot  est appelée à chaque fois que l utilisateur valide une réponse ou lorsque la barre de progression arrive à 0 elle vérifie la réponse met à jour les compteurs et relance une nouvelle question si l exercice n est pas terminé ce qui nous donne le code suivant class mainformimpl mainform op1 0 la valeur du 1er opérande op2 0 la valeur du 2nd opérande resultat 0 la valeur du résultat debutexercice 00 pour calculer la durée de l exercice def init self parent none name none modal 0 fl 0 mainforminit self parent name modal fl selftimer qtimer self selfconnect selftimer signal timeout selftimeoutslot public slot def init self items itemsappend qlistviewitem selfexerciselistview additions itemsappend qlistviewitem selfexerciselistview divisions itemsappend qlistviewitem selfexerciselistview multiplications itemsappend qlistviewitem selfexerciselistview soustractions try fsock open exercicestxt try datalines line for line in fsockreadlines if line 0 finally fsockclose except ioerror pass try for dataline in datalines exercice oorq delai question refindall t t t t d t d dataline 0 op1min op1max q1 operateur op2min op2max q2 max q3 refindall 09130913 09130913 0913 oorq 0 itemsappend qlistviewitem items index operateur unicode exercice utf8 oorq delai question except nameerror pass def testreponseslot self if selftimerisactive selftimerstop if selfoperande1lineedittext ascii or selfoperande2lineedittext ascii or selfresultatlineedittext ascii or eval selfoperande1lineedittext ascii selfoperateurtext ascii selfoperande2lineedittext ascii eval selfresultatlineedittext ascii selfwronglcdnumberdisplay selfwronglcdnumberintvalue 1 qmessageboxinformation self unicode voici la bonne rã ponse n selfop1 selfoperateurtext ascii selfop2 selfresultat utf8 todo mã moriser les paramã tre de la question pour la reposer ã la fin de l exercice else selfgoodlcdnumberdisplay selfgoodlcdnumberintvalue 1 selftotallcdnumberdisplay selftotallcdnumberintvalue 1 if selftotallcdnumberintvalue int selfcountlineedittext ascii or not nouveauxnombres self selfstartpushbuttonsetenabled 1 qmessageboxinformation self unicode exercice terminé en d secondes int timetime selfdebutexercice utf8 else selfdelaiprogressbarsetprogress int selfdelailineedittext ascii 100 selftimerstart 10 def startslot self selfstartpushbuttonsetenabled false nouveauxnombres self selfdelaiprogressbarsettotalsteps int selfdelailineedittext ascii 100 selfdelaiprogressbarsetprogress int selfdelailineedittext ascii 100 selfoperateursettext selfoperateurcomboboxcurrentitem selftotallcdnumberdisplay 0 selfgoodlcdnumberdisplay 0 selfwronglcdnumberdisplay 0 selftimerstart 10 selfdebutexercice timetime def timeoutslot self p selfdelaiprogressbarprogress if p 0 selfdelaiprogressbarsetprogress p1 else selftestreponseslot def selectexerciseslot self exercise selfexerciselistviewcurrentitem text 1 ascii if exercise op1min op1max q1 operateur op2min op2max q2 max q3 refindall 09130913 09130913 0913 exercise 0 selfminop1lineeditsettext op1min selfmaxop1lineeditsettext op1max selfoperateurcomboboxsetcurrentitem index operateur selfminop2lineeditsettext op2min selfmaxop2lineeditsettext op2max selfresultatmaxlineeditsettext max selfpositionlineeditsettext q1 q2 2 q3 4 selfcountlineeditsettext selfexerciselistviewcurrentitem text 3 ascii selfdelailineeditsettext selfexerciselistviewcurrentitem text 2 ascii else operateur selfexerciselistviewcurrentitem text 0 ascii selfoperateurcomboboxsetcurrentitem multiplications additions soustractions divisions index operateur def nouveauxnombres self revision 0 initialise les donnã es pour une nouvelle question op1min int selfminop1lineedittext ascii op1max int selfmaxop1lineedittext ascii op2min int selfminop2lineedittext ascii op2max int selfmaxop2lineedittext ascii resultatmax int selfresultatmaxlineedittext ascii operation selfoperateurcomboboxcurrentitem posquestion int selfpositionlineedittext ascii if revision qmessageboxinformation 0 révision révisions terminées return 0 else if operation while 1 selfop2 randomrandint op2min op2max selfresultat randomrandint 0 resultatmax selfop1 selfresultat selfop2 if selfop1 op1min and selfop1 op1max break else while 1 selfop1 randomrandint op1min op1max selfop2 randomrandint op2min op2max selfresultat eval str selfop1 operation str selfop2 if selfresultat 0 and selfresultat resultatmax break if posquestion 1 postrou 0 elif posquestion 2 postrou 1 elif posquestion 3 postrou randomrandint 01 elif posquestion 4 postrou 2 elif posquestion 5 if randomrandint 01 postrou 2 else postrou 0 elif posquestion 6 postrou randomrandint 12 elif posquestion 7 postrou randomrandint 02 if postrou 0 op1 selfoperande1lineeditsettext selfoperande1lineeditsetreadonly 0 selfoperande2lineeditsettext selfop2 selfoperande2lineeditsetreadonly 1 selfresultatlineeditsettext selfresultat selfresultatlineeditsetreadonly 1 selfoperande1lineeditsetfocus elif postrou 1 op2 selfoperande1lineeditsettext selfop1 selfoperande1lineeditsetreadonly 1 selfoperande2lineeditsettext selfoperande2lineeditsetreadonly 0 selfresultatlineeditsettext selfresultat selfresultatlineeditsetreadonly 1 selfoperande2lineeditsetfocus elif postrou 2 resultat selfoperande1lineeditsettext selfop1 selfoperande1lineeditsetreadonly 1 selfoperande2lineeditsettext selfop2 selfoperande2lineeditsetreadonly 1 selfresultatlineeditsettext selfresultatlineeditsetreadonly 0 selfresultatlineeditsetfocus return 1 si vous lancez l application vous devriez obtenir ceci  pour la suite c est ici historique des modifications version date commentaire 01 03042006 création par jibux 02 26112006 ajout d un lien vers l article suivant les fichiers sources de cette application fichier attaché taille revcaljpg 282 ko les fichiers sources de cette application 45 ko  python et qt tutoriel 7  ras o   python et qt tutoriel 7  merci pour ta relecture  qt  