Vous êtes ici : Accueil / Forums & ML / Forums Python / Forum général Python / GTK, DrawingArea, Rafraîchissement de fenêtre

GTK, DrawingArea, Rafraîchissement de fenêtre

Remonter à Forum général Python
  • GTK, DrawingArea, Rafraîchissement de fenêtre

    Envoyé par brain le 14 Novembre 2008 à 01:15
    Bonjour à tous,
    Je souhaite créer une application avec un affichage en direct des données. Normalement le modèle écrit dans un fichier et l'interface lit ces données afin de les afficher. Ici, j'ai simplifié le problème avec d'un côté une méthode qui permet d'écrire dans une "Queue" et une autre qui interroge cette même "Queue" à intervalle régulier et les affiches.
    Or seul le premier point est affiché. Le "background" reste gris. Comment ce fait-ce? Faut-il utiliser un "Pixmap"? un "Cairo"? Deux choses que je n'ai pas réellement compris.
    Ce code demande simplement les valeurs de "x" et "y" et un point devrait s'afficher (cela ne fonctionne qu'une seule fois je vous le rappelle).
    Voici le code:


    #!/usr/bin/python
    # -*- coding: UTF-8 -*-

    import pygtk
    pygtk.require('2.0')
    import gtk
    from gobject import *
    from threading import *
    from Queue import *
    from time import sleep

    class Test:

    def __init__(self):
    self.__queue = Queue()
    self.__window = gtk.Window()
    self.__scrolled = gtk.ScrolledWindow()
    self.__window.add(self.__scrolled)
    self.__window.set_size_request(600, 200)
    self.__scrolled.show()
    self.__window.show()
    self.__window.connect("delete-event", self.__stop__)

    # zone de dessin
    self.__drawingArea = gtk.DrawingArea()
    self.__scrolled.add_with_viewport(self.__drawingArea)
    self.__drawingArea.show()

    self.__gc = self.__drawingArea.window.new_gc()
    self.__gc.set_background(gtk.gdk.color_parse("white"))

    # méthode par laquelle l'utilisateur écrit les valeurs x et y
    self.__thread = Thread(None, self.__write__, None, ())
    self.__thread.start()
    # toutes les 10 millisecondes on vérifie si il y a de nouvelles valeurs dans la "queue"
    IDSource = timeout_add(10, self.__plot__)

    # méthode pour ajouter les valeurs x et y dans la "queue"
    def __write__(self):
    while True:
    x = int(raw_input("x: "))
    y = int(raw_input("y: "))
    self.__queue.put((x, y))
    sleep(0.02)

    # méthode qui lit x et y et doit les afficher
    def __plot__(self):
    (x, y) = self.__queue.get()
    if x:
    print "\nread: " , x, y
    x = int(x)
    y = int(y)
    self.__drawingArea.window.draw_point(self.__gc, x, y)
    return True

    def __stop__(self, event):
    self.__thread._Thread__stop()
    gtk.main_quit


    if __name__ == '__main__':
    app = Test()
    gtk.main()


    Merci d'avances pour vos réponses, cela doit être un problème simple mais cela fait déjà plusieurs jours que je cherche sans succès.

    Cordialement


    PS: je vous envoie le fichier avec la bonne indentation car les balises
    n'ont pas l'air de fonctionner comme il ce doit
Rendu par Ploneboard