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

Tkinter Python Discussion :

[Tkinter] Thread pas logique!


Sujet :

Tkinter Python

  1. #1
    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 : 48
    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
    Points : 891
    Points
    891
    Par défaut [Tkinter] Thread pas logique!
    bonjour, je suis toujours avec mon problème de thread. C'est pas évident a prendre en main!

    Voilà le soucis.
    J'ai une interface qui dois afficher le contenu d'un dossier.
    (fenetre + Pmw.scrolledListbox + bouton 'Quitter')

    Ma fonction dois tourner en permanence et afficher dans ma fenetre la liste de contenu.
    Ma fonction de listage fonctionne. Mon bouton Quitter fonctionne aussi.
    Pour gérer les évènements et le listage, je crée deux threads
    le premier lance mon mainloop()
    le deuxieme lance ma fonction de listage.

    La le problème est que monlistbox n'est pas mis a jour. Mais si je veux quitter mon programme, ca délenche la mise a jour du listbox alors que normalement ca ferme mon appli.
    Et la mon appli je ne peux plus la fermer. le bouton quitter ne fonctionne plus.

    Est ce que quelqu'un aurait un exemple a me fournir de gestion de Gui avec utilisation de thread.
    merci

  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 : 48
    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
    Points : 891
    Points
    891
    Par défaut
    voici le code incriminé.

    Ce n'est pas le code original, mais une version trés light.
    le principe est là.

    pour ceux que ca intérrèsse!
    merci pour votre aide ou suggestions.
    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
    import threading
    import Tkinter
    import Pmw
    import os
    import time
    import glob
     
     
    class gui:
        def __init__(self):
            self.root=Tkinter.Tk()
            frame=Tkinter.Frame(self.root)
            frame.grid()
            self.lb=Pmw.ScrolledListBox(frame,usehullsize=1,hull_width=485,
            hull_height=220)
            #self.val_lb(self.lb,self.listdirectory())
            self.lb.grid()
            Tkinter.Button(self.root,text='quiter',command=self.root.quit).grid()
            th_1=threading.Thread(self.root.mainloop())
            th_2=threading.Thread(self.f_th_2())
            self.mes_thread()
     
        def val_lb(self,cont,item):
            cont.setlist(item)
     
        def listdirectory(self,path='c:/hotfolders'): 
            '''Fonction de listage d'un dossier'''
            fichier=[] 
            l = glob.glob(path+'\\*') 
            for i in l: 
                if os.path.isdir(i):
                    fichier.append(os.path.split(i)[1])
                else: 
                    pass
     
            return fichier
     
        def mes_thread(self):
            th_2.start()
            th_1.start()
     
        def f_th_2(self):
            while 1:
                time.sleep(0.1)
                a=self.listdirectory(path='c:/hotfolders')
                self.lb.setlist(a)
                self.root.update()
     
     
     
     
    if __name__ == "__main__":
        gui()
    remplacez le path de la fonction listdirectory pour votre system.
    merci

  3. #3
    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 : 48
    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
    Points : 891
    Points
    891
    Par défaut
    Bon et bien a force d'acharnement, on arrive a tout!

    voici comment j'ai enfin réussi a résoudre mon problème.
    si quelqu'un a mieux, je prend quand même.
    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
    import threading
    import Tkinter
    import Pmw
    import os
    import time
    import glob
     
     
    class gui:
        def __init__(self):
            self.root=Tkinter.Tk()
            frame=Tkinter.Frame(self.root)
            frame.grid()
            self.lb=Pmw.ScrolledListBox(frame,usehullsize=1,hull_width=485,
            hull_height=220)
            self.lb.grid()
            Tkinter.Button(self.root,text='quiter',command=self.stop_mesthread).grid()
     
            self.th_2=threading.Thread(self.f_th_2())
     
            self.lock=0
            self.mes_thread()
     
        def val_lb(self,cont,item):
            cont.setlist(item)
     
        def listdirectory(self,path='c:/hotfolders'): 
            """Fonction de listage d'un dossier"""
            fichier=[] 
            l = glob.glob(path+'\\*') 
            for i in l: 
                if os.path.isdir(i):
                    fichier.append(os.path.split(i)[1])
                else: 
                    pass
     
            return fichier
     
        def mes_thread(self):
            if self.lock==0:
                self.th_1=threading.Thread(self.root.mainloop())
                self.th_1.start()
                self.th_2.start()
                self.lock=-1
            else:
                pass
     
        def stop_mesthread(self):
            self.lock=1
            if self.lock==1:
                #self.th_1.__Thread__.stop()
                #self.th_2.__Thread__.stop()
                self.root.quit() 
                self.root.destroy()
                self.lock=-1 
     
     
        def f_th_2(self):
            while 1:
                time.sleep(0.1)
                a=self.listdirectory(path='c:/hotfolders')
                self.lb.setlist(a)
                self.root.update()
     
     
     
     
    if __name__ == "__main__":
        gui()

  4. #4
    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 : 48
    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
    Points : 891
    Points
    891
    Par défaut
    Par exemple, je n'arrive pas a fixer ma selection d'item.
    elle disparait a du fait de la mise a jour des données dans la listbox.
    j'arrive a fixer une valeur, ce qui a pour conséquence de mettre en surligné toujours la même valeur dans la list, mais je n'arrive pas a fixer et réutiliser l'index d'un item lorsque je clic dessus.

    quelqu'un peut il m'aider.

  5. #5
    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 : 48
    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
    Points : 891
    Points
    891
    Par défaut
    ca y est j'ai trouvé.


+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. erreur n'est pas logique
    Par info_sara dans le forum C++Builder
    Réponses: 9
    Dernier message: 01/06/2008, 17h51
  2. Threads pas vraiment threadé.
    Par iza76 dans le forum C
    Réponses: 2
    Dernier message: 18/03/2008, 06h47
  3. Plan d'exécution pas logique
    Par pat29 dans le forum Administration
    Réponses: 6
    Dernier message: 07/03/2008, 14h37
  4. threads pas Thread ! (1 tte tite question)
    Par lagra3 dans le forum Langage
    Réponses: 3
    Dernier message: 11/08/2006, 12h28
  5. [JPanel] un thread pas très catholique...
    Par calogerogigante dans le forum AWT/Swing
    Réponses: 25
    Dernier message: 21/05/2006, 22h01

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