Bonjour à tous,
Pour mon premier post, je rentre d'emblée dans un sujet difficile (pour moi). J'utilise Python 2.6 sous XP : un gros point noir pour moi dans l'utilisation de Python : la compréhension et donc la constitution de classes.
Mais je m'éloigne un peu de mon sujet : on a sollicité de ma part une aide que je me retrouve incapable de fournir.
Une de mes connaissances a établi un petit programme en Python sans appel à un quelconque GUI (tkinter ou autre) un petit programme qui fonctionne.
Il a établi une série de questions sur la 1ere déclinaison latine et une série de réponses correspondantes.
12 questions sont tirées au sort de façon à ce que 2 fois la même question dans une série ne soit pas posée...
Les réponses son traitées : Vrai -Faux et un bilan établi au terme de la série de questions.
Ce programme fonctionne tel quel même s'il est grandement améliorable au niveau code...
L'os sur lequel je bute est l'ajout d'un temps imparti pour répondre à la question et en cas de délai dépassé, arrêt du timer, génération d'une nouvelle question et redémarrage du timer.
Après recherche je suis tombé sur ce code de guigui : http://python.developpez.com/faq/ind...ad#ThreadTimer
Ce code étant opérationnel, s'est posée la question de son adaptation aux besoins de la problématique.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36 # -*- coding: cp1252 -*- import threading import time class MyTimer: def __init__(self, tempo, target, args= [], kwargs={}): self._target = target self._args = args self._kwargs = kwargs self._tempo = tempo def _run(self): self._timer = threading.Timer(self._tempo, self._run) self._timer.start() self._target(*self._args, **self._kwargs) def start(self): self._timer = threading.Timer(self._tempo, self._run) self._timer.start() def stop(self): self._timer.cancel() def affiche(unstr): print unstr, time.clock() a = MyTimer(1.0, affiche, ["MyTimer"]) a.start() time.sleep(5.5) print u"Timer arrêté" a.stop() time.sleep(2.0) print u"Timer relancé" a.start()
J'ai essayé de procéder comme suit :
J'ai modifié le def affiche(unstr) de guigui en :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 a = MyTimer(1.0, scrute, ["Temps :"]) a.start() ReponseUtilisateur=raw_input("Entrez votre réponse : ")
Le timer ne démarre qu'après avoir donné la réponse : là si j'attends 5 s, le message Délai dépassé apparaît.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 def scrute(Stop): temps = int(time.clock()) if temps > 5 : print "Délai dépassé !" a.stop()
Tout se passe donc comme si le raw_input bloquait le lancement du timer.
Il faudrait donc que fonctionnement du timer et le déroulement du programme se fasse dans 2 processus différents, non ?
Je n'ai donc finalement rien compris au fonctionnement de la classe Mytimer de guigui. Et on en revient à ce que je disais au début sur la compréhension des classes...
Je ne vois pas comment, dans l'état actuel de mes connaissances, je peux m'en sortir : je suis ouvert à toute suggestion, mercuriale, critique...
Merci d'avance
Partager