Bonjour à tous,
j'aimerais afficher un message (et le mettre à jour) dans un text buffer toutes les secondes... un message du type :
Démarrage dans 10 secondes
Démarrage dans 9 secondes
Démarrage dans 8 secondes
Démarrage dans 7 secondes
J'ai donc défini une classe GuiDisplay :
Malheureusement ça ne fonctionne pas... le thread est bien lancé (rien ne s'affiche dans la zone de texte) mais l'interface graphique freeze et je dois justement pouvoir cliquer sur le bouton Annuler.Code:
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
37
38
39
40
41
42
43 class GuiDisplay (Thread) : def __init__(self, displayType, textBuffer, text, time): Thread.__init__(self) self.displayType = displayType self.textBuffer = textBuffer self.text = text self.time = time def run(self): if (self.displayType == DisplayType.PROGRESS) : elapsed_time = 1 self.time = self.time + 1 startIt = self.textBuffer.get_end_iter() length = len(message) while (elapsed_time < self.time) : progress = int(elapsed_time / self.time * 100) message = self.text % (progress) print("PROGRESS...") self.textBuffer.insert(startIt, message) endIt = self.textBuffer.get_end_iter() time.sleep(1) elapsed_time = elapsed_time + 1 self.textBuffer.delete(startIt, endIt) return None if (self.displayType == DisplayType.SUMMARY) : elapsed_time = 1 self.time = self.time + 1 startIt = self.textBuffer.get_end_iter() while (elapsed_time < self.time) : message = self.text % (self.time - elapsed_time) length = len(message) self.textBuffer.insert(startIt, message) endIt = self.textBuffer.get_end_iter() print("SUMMARY : " + message + "\n") time.sleep(1) elapsed_time = elapsed_time + 1 self.textBuffer.delete(startIt, endIt) return None class DisplayType : PROGRESS=1 SUMMARY=2
Je créé le Thread comme ceci :
Quelqu'un pourrait m'expliquer ce qui ne va pas? :?Code:
1
2
3
4 self.summaryThread = GuiDisplay(DisplayType.SUMMARY, self.textBuffer, message, self.waiting_seconds) self.summaryThread.start() self.summaryThread.join()
