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 :
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
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
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.

Je créé le Thread comme ceci :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
 
		self.summaryThread = GuiDisplay(DisplayType.SUMMARY, self.textBuffer, message, self.waiting_seconds)
		self.summaryThread.start()
		self.summaryThread.join()
Quelqu'un pourrait m'expliquer ce qui ne va pas?