Vous êtes ici : Accueil / Forums & ML / Forums Python / Forum général Python / Thread qui modifie un parametre de sa classe parente

Thread qui modifie un parametre de sa classe parente

Remonter à Forum général Python
  • Thread qui modifie un parametre de sa classe parente

    Envoyé par zizou1304 le 9 Mars 2009 à 17:12
    Désolé pour la mise en page !!!


    Bonjour,
    je suis bloqué sur un problème qui me parait tordu. Voici mon code :
    -------------------------------------------------------------------
    #!/usr/bin/env python
    #-*- coding:Latin-1 -*-

    from PyQt4 import Qt
    from PyQt4 import Qwt5 as Qwt
    import threading
    import sys


    class Graphe(Qwt.QwtPlot):
    def __init__(self):
    Qwt.QwtPlot.__init__(self)
    self.setCanvasBackground(Qt.Qt.red)

    self.thread = ThreadGraphe(self)
    self.thread.start()

    class ThreadGraphe(threading.Thread):
    def __init__(self,boss):
    threading.Thread.__init__(self)
    self.boss = boss
    #self.boss.setCanvasBackground(Qt.Qt.white)

    def run(self):
    #self.boss.setCanvasBackground(Qt.Qt.yellow)
    pass


    if __name__ == "__main__":
    app = Qt.QApplication(sys.argv)
    Graphe().show()
    app.exec_()
    ----------------------------------------------------------------
    Un petit graphe apparait en rouge. Normal, c'est comme cela que je le crée.
    Si on enlève le # dans le __init__ du thread, le graphe devient blanc. Normal jusque là.
    Mais si on enlève le # du run, ma fenetre python se ferme brutalement alors que je m'attendais à voir un beau jaune ?!?
    Je bosse avec IDLE sous Ubuntu, python 2.5.
    Est-ce que quelqu'un saurait ce qu'il se passe ? Ce code fait-il la même chose chez vous ?
    Merci beaucoup !

    PS : pour les curieux, le but est de faire un oscillo, avec un affichage constamment remis à jour par ce thread.
    PS 2 : code en pièce jointe pour avoir une meilleure mise en page

    • Re: Thread qui modifie un parametre de sa classe parente

      Envoyé par zizou1304 le 16 Avril 2009 à 13:22
      Je me réponds à moi-même....
      Le thread ne peut pas aller toucher directement les caractéristiques d'une classe graphique.
      Une manière de faire est de créer une classe générale qui instancie Graphe et ThreadGraphe et qui contient deux variables "flag" et "couleur".

      ThreadGraphe fait son boulot de traitement. Quand il a fini, il met ses résultats dans une variable. Ici, on met "jaune" dans "couleur".
      Et on met le flag à 1.

      Graphe teste toutes les secondes ce flag. S'il est à 0, il ne fait rien et s'il est à 1, il va lire le contenu de "couleur" et se change lui-même sa couleur de fond.Ainsi, seule la classe Graphe modifie les caractéristiques.

      Penser à mettre une tempo sur le test de flag (comme ici toutes les secondes) pour ne pas emballer le processeur.

      Y'a surement mieux comme solution... mais j'ai jamais dit que la mienne était la meilleure...
Rendu par Ploneboard