OVH Cloud OVH Cloud

GTK et threads bloquants

1 réponse
Avatar
jak
Bonjour,

je tente d'ecrire un ptit bout de code qui me parraissait simple dans ma
ptite tête, mais qui semble plus relou à ecrire en vrai :)

L'idée est simple, je veux lancer une fenetre gtk tout en gardant une
console opérationnelle pour la saisie clavier

Ca donne un truc du genre :

#=========================================

import pygtk,gtk,threading

class Gui(threading.Thread):
def __init__(self):
threading.Thread.__init__(self)
self.setDaemon(True)
self.window = gtk.Window()
self.window.connect("destroy",gtk.main_quit)
self.window.connect("delete_event",self.quitter)
self.window.set_title("bla bla bla")
self.window.show()

def quitter(self,widget,data=None):
print "Au revoir !"
return False

def run(self):
print "Demarrage de l'interface graphique OK"
gtk.main()

#programme principal
gui = Gui()
gui.start()

continu = True
while continu:
command = raw_input("prompt> ")
if command == "quit":
continu = False
else:
print "%s : commande inconnue" % command


#=========================================


Voilà, sauf que là, ma console est bloquée tant que je n'ai pas fermé ma
fenetre gtk. Etant donné que ma classe Gui hérite de threading.Thread,
comment se fait il qu'elle bloque mon programme principal ??

Merci pour votre aide

a+, et bonne année !

1 réponse

Avatar
jak
Apparement mon problème a été résolu en placant la ligne :

gtk.gdk.threads_init()

juste avant ma ligne

gtk.main()


Je ne saurai expliqué trop en détail le pourquoi du comment, c'est
surement une technique spécifique à pygtk :s