bonjour,

j'essaie en ce moment de faire un système de chat à but didactique en utilisant la librairie graphique pygtk.
je rencontre un problème lors de la réception d'un message avec le thread chargé de receptionner/afficher les messages:
j'ai l'impression que gtk bloque le threads car celui-ci affiche les messages recus (enfait tout les messages a la suite sans le \n ) lorsque je ferme la fenetre gtk.

voici le code:
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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
 
import pygtk
pygtk.require('2.0')
import gtk,threading,socket
 
class Treception(threading.Thread):
    def __init__(self,lesocket,maitre):
        threading.Thread.__init__(self)
        self.socket = lesocket
        self.maitre = maitre
 
    def run(self):
        print 'debut de run'
        message = "bla"
        while 1:
            message = self.socket.recv(1024)
            print 'message recu'
            if message=='quit':
                pass
            else:
                print message+"\n"
                self.maitre.Tbuffer.insert(self.maitre.Tbuffer.get_end_iter(),"lui>"+message+"\n")
 
 
class chat:
    def hello(self,widget,argument=None):
        self.Tbuffer.insert(self.Tbuffer.get_end_iter(),"toi>"+self.message.get_text()+"\n")
        self.lesocket.send(self.message.get_text())
        self.message.set_text('')
 
 
    def quitter(self,widget, argument = None):
        gtk.main_quit()
 
    def __init__(self,port,adress):
        self.creerinterface()
        self.creersocket(adress,port)
 
    def creersocket(self,adress,port):
        self.lesocket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
        self.lesocket.connect((adress,port))
 
    def creerinterface(self):
 
        self.fenetre = gtk.Window(gtk.WINDOW_TOPLEVEL)
        self.fenetre.connect('destroy',self.quitter)
        self.fenetre.resize(600,400)
 
        self.text = gtk.TextView()
        self.text.set_editable(False)
 
        self.message = gtk.Entry()
 
        self.Tbuffer = gtk.TextBuffer()
        self.text.set_buffer(self.Tbuffer)
 
        self.scroll = gtk.ScrolledWindow()
        self.scroll.add(self.text)
        self.scroll.show()
 
        self.bouton = gtk.Button("cliquez-moi")
        self.bouton.connect('clicked',self.hello,None)
 
        self.boitePrincipale = gtk.VBox(False,5)
        self.boitePrincipale.pack_start(self.scroll)
 
        self.boiteSecondaire = gtk.HBox(False,5)
        self.boiteSecondaire.pack_start(self.message)
        self.boiteSecondaire.pack_start(self.bouton,expand=False)
 
        self.boitePrincipale.pack_start(self.boiteSecondaire, expand = False)
 
        self.fenetre.add(self.boitePrincipale)
        self.boitePrincipale.show()
        self.boiteSecondaire.show()
        self.message.show()
        self.text.show()
        self.bouton.show()
 
        self.fenetre.show()
 
    def lancer(self):        
        gtk.main()
 
    def get_socket(self):
        return self.lesocket
 
program = chat(1103,'127.0.0.1')
reception = Treception(program.get_socket(),program)
reception.start()
program.lancer()
sauriez vous m'aider?