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 :

Edition de la mainloop (ou autre solution)


Sujet :

Tkinter Python

  1. #1
    Candidat au Club
    Inscrit en
    Mai 2007
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 2
    Points : 2
    Points
    2
    Par défaut Edition de la mainloop (ou autre solution)
    Bonjour,

    je suis actuellement en train de développer un bout de code mélant 3D et interface graphique (il s'agit d'un système de supervision de systèmes). L'utilisateur doit pouvoir cliquer sur des éléments 3D et voir une modification dans l'interace, et doit pouvoir cliquer sur des boutons dans l'interface qui vont déclencher des actions dans l'environnement 3D.

    Je dois donc envoyer des évènements du monde vers la GUI et de la GUI vers le monde. J'arrive sans aucun problème a envoyer des éléments de la GUI vers le monde, mais l'opération inverse me résiste.

    J'utilise actuellement Python, Panda3D et Tkinter. Panda3D (mon monde en 3D) est dans le thread principal (c'est une obligation, sinon il refuse de se lancer), et Tkinter dans le thread secondaire (je n'ai pour le moment besoin que de deux threads).

    Les informations passent de la GUI au monde via deux "Queue" (une pour chaque sens). Ensuite, l'idée est d'avoir dans chaque thread une fonction qui tourne en boucle pour surveiller si il y a des éléments dans la queue. C'est très simple à faire dans Panda3D, mais beaucoup plus compliqué (ou en tout cas je n'ai pas compris) dans Tkinter.

    Je vois deux solutions possibles à mon problèmes, mais je n'ai aucune idée de la façon dont je pourrais les mettre en oeuvre.

    1 : modifier la mainloop pour qu'elle surveille la Queue
    2 : arriver à envoyer un signal du thread principal (monde 3D) vers le thread secondaire (GUI)

    Il est fort possible que ma structure de base (les Queue) ne soit pas la plus approprié pour ce genre de problème donc si vous avez une meilleure idée, je suis preneur.

    Je copie colle des bouts de codes histoire d'illustrer mon propos :

    Mon code principal :
    tkGUI est le nom de la classe avec laquelle je génère ma GUI, et cette classe est écrite dans le fichier tk.py (je sais, ce n'est pas la meilleure idée de donner un tel nom)
    Browser est le nom de ma classe qui gère tout ce qui est 3D

    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
     
    from browser import *
    from Queue import *
    from tk import *
     
    class tkThread(threading.Thread):
     
        def __init__(self,qGuiEvents,qWorldEvents):
            threading.Thread.__init__(self)
            self.gui = TkGUI(qGuiEvents,qWorldEvents)
     
        def run(self):
            self.gui.root.mainloop()
     
     
    qGuiEvents = Queue()
    qWorldEvents = Queue()
    # GUI starts
    interface = tkThread()
    interface.start()
    # World starts
    browser = Browser()
    Si vous ne savez pas répondre, savez vous où je peux trouver des infos à ce sujet ? Merci d'avance.

  2. #2
    Candidat au Club
    Inscrit en
    Mai 2007
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    Après en avoir discuté avec des copains largement plus compétents que moi, il est apparu que pyGTK a la solution à mon problème. Je migre donc vers cette lib.

    Pour ceux que ça intéresse, il faut utiliser la boucle idle.

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

Discussions similaires

  1. Réponses: 9
    Dernier message: 01/06/2006, 23h34
  2. [Tkinter] faire disparaitre un label ou autre solution
    Par thierry_b dans le forum Tkinter
    Réponses: 3
    Dernier message: 06/01/2006, 17h22
  3. Réponses: 4
    Dernier message: 16/11/2005, 17h12
  4. Etat : fond de page ou autre solution ?
    Par Mulele dans le forum IHM
    Réponses: 3
    Dernier message: 11/11/2005, 20h15
  5. Autre solution que IBEvents
    Par aallal dans le forum Bases de données
    Réponses: 3
    Dernier message: 17/10/2005, 13h12

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