J'ai un problème plutôt étrange, regardez le code source suivant
import sys, gtk, threading
def test(*args):
dialog = gtk.MessageDialog(None, gtk.DIALOG_MODAL, gtk.MESSAGE_INFO, gtk.BUTTONS_OK, "Plop")
dialog.run()
dialog.destroy()
def test_thread():
gtk.gdk.threads_enter()
test()
gtk.gdk.threads_leave()
def test_threaded(*args):
threading.Thread(target=test_thread).start()
gtk.gdk.threads_init()
w = gtk.Window(gtk.WINDOW_TOPLEVEL)
b1 = gtk.Button("gtk.Dialog dans le thread principal")
b2 = gtk.Button("gtk.Dialog dans un autre thread")
h = gtk.HButtonBox()
b1.connect("clicked", test)
b2.connect("clicked", test_threaded)
w.add(h)
h.pack_start(b1)
h.pack_start(b2)
w.show_all()
gtk.main()
Lorsque l'on créé un gtk.Dialog dans le thread principal, tout fonctionne correctement
Ensuite, lors d'un premier clic sur "gtk.Dialog dans un autre thread", ça fonctionne correctement. Mais si je reclique dessus, le programme gèle :-/
Une idée d'où peut venir ce problème ?
Merci d'avance :)
# RE
Posté par Sylvain (site web personnel) . Évalué à 1.
[^] # Désoler jai oublier un truc
Posté par Sylvain (site web personnel) . Évalué à 0.
[^] # Re: Désoler jai oublier un truc
Posté par Moonz . Évalué à 1.
import sys, gtk, threading
def test(*args):
dialog = gtk.MessageDialog(None, gtk.DIALOG_MODAL, gtk.MESSAGE_INFO, gtk.BUTTONS_OK, "Plop")
dialog.run()
dialog.destroy()
class Thread(threading.Thread):
def __init__(self):
threading.Thread.__init__(self)
def run(self):
gtk.gdk.threads_enter()
test()
gtk.gdk.threads_leave()
return
class Main(gtk.Window):
def __init__(self):
gtk.gdk.threads_init()
gtk.Window.__init__(self, gtk.WINDOW_TOPLEVEL)
b1 = gtk.Button("gtk.Dialog dans le thread principal")
b2 = gtk.Button("gtk.Dialog dans un autre thread")
h = gtk.HButtonBox()
b1.connect("clicked", test)
b2.connect("clicked", self.thread)
h.pack_start(b1)
h.pack_start(b2)
self.add(h)
self.show_all()
gtk.main()
def thread(self, btn):
t = Thread()
t.start()
Main()
Le plus étrange, c'est que ça fonctionne la première fois, mais pas la deuxième.
Merci quand même :)
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.