IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Thread : ne marche pas avec IHM PyGTK


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Février 2006
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 28
    Par défaut Thread : ne marche pas avec IHM PyGTK
    Bonjour à tous.

    Je suis sur un problème en python que je n'arrive pas à résoudre.
    J'ai un script qui tourne actuellement et on souhaiterait que ce script lance une IHM PyGTK (une simple fenetre qui affichera les résultat du script en temps réel mais ça c'est une autre histoire) tout en continuant à tourner.
    J'ai donc tenté de lancer le traitement que fait le script dans un thread et de lancer min IHM dans le thread principal.
    Lors du lancement de l'outil, l'IHM est bien lancée mais le script se met en pause(c'est l'IHM qui bloque le déroulement car lorsque j'appelle une autre fonction à la place de l'IHM, là ça marche). Ce n'est que lorsque je ferme la fenetre de l'IHM qu'il poursuit son traitement.

    Si vous pouviez m'aider ça serait cool car ça fait pas mal de temps que je bute sur ce problème...

    Merci d'avance.

    Voici le code en pièce jointe
    Fichiers attachés Fichiers attachés

  2. #2
    Membre éclairé
    Avatar de airod
    Homme Profil pro
    Gérant Associé, DMP Santé et Directeur technique
    Inscrit en
    Août 2004
    Messages
    767
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Gérant Associé, DMP Santé et Directeur technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 767
    Par défaut
    bonsoir avez vous essayez d'inverser le thread.start()

    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
    from threading import Thread
    from time import sleep
    from Interface_Graphique_OVIL import IHMInterface
    
    def launchProcess():
        for i in range (20):
            print "J ECRIS LA LIGNE PENDANT QUE L'IHM EST AFFICHEE"
            sleep(0.1)
    
    if __name__ == '__main__':
        
        print("LANCEMENT")
    
        
        # Lancement de l'IHM
        processThread = Thread(None, launchProcess)
                 
        ihm = IHMInterface()
        processThread.start()
    juste une idée comme ca.
    J'ai pas gtk d'installé et je n'ai pas testé.
    Mais j'ai jamais utilisé les Thread comme ca.

  3. #3
    Membre Expert Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Par défaut
    Bonjour,

    Je ne connais pas gtk mais deux choses :

    Si le but n'est que l'affichage vous devez lancer ce qui est bloquant qu'après le main (lui même bloquant).
    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
    import gobject
     
    from time import sleep
     
    import gtk
     
     
     
    class IHMInterface():
     
    ...           
     
            self.window.show_all()
     
            gobject.timeout_add(600, launchProcess)
     
            gtk.main()
     
    ...
    def launchProcess():
     
        for i in range (10000):
     
            print "J ECRIS LA LIGNE PENDANT QUE L'IHM EST AFFICHEE"
     
            sleep(0.1)
     
     
     
    if __name__ == '__main__':
     
        ihm = IHMInterface()
    Relisez bien l'exemple de la faq sur les threads
    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
    import threading
    import time
    import gobject
    import gtk
     
    gobject.threads_init()
     
    class MyThread(threading.Thread):
        def __init__(self, label):
            super(MyThread, self).__init__()
            self.label = label
            self.quit = False
     
        def update_label(self, counter):
            self.label.set_text("Counter: %i" % counter)
            return False
     
        def run(self):
            counter = 0
            while not self.quit:
                counter += 1
                gobject.idle_add(self.update_label, counter)
                time.sleep(0.1)
     
    w = gtk.Window()
    l = gtk.Label()
    w.add(l)
    w.show_all()
    w.connect("destroy", lambda _: gtk.main_quit())
    t = MyThread(l)
    t.start()
     
    gtk.main()
    t.quit = True
    @+

Discussions similaires

  1. [PHP-JS] Marche pas avec le Javascript?
    Par MinsK dans le forum Langage
    Réponses: 3
    Dernier message: 04/05/2006, 14h24
  2. [VB6] TypeOf ne marche pas avec les Label ?
    Par belfaigore dans le forum VB 6 et antérieur
    Réponses: 14
    Dernier message: 21/04/2006, 13h36
  3. [CSS] Bug IE avec height ne marche pas avec les %
    Par El Riiico dans le forum Mise en page CSS
    Réponses: 3
    Dernier message: 23/06/2005, 17h11
  4. [xhtml][css] bouton du form ne marche pas avec IE6
    Par chinouk dans le forum Mise en page CSS
    Réponses: 3
    Dernier message: 14/06/2005, 14h00
  5. Rollback ne marche pas avec interbase
    Par Tsimplice dans le forum Bases de données
    Réponses: 2
    Dernier message: 09/03/2004, 08h39

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo