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 programme avec d'un côté une méthode qui permet d'écrire dans une "Queue" et une autre qui interroge cette même "Queue" à intervalles réguliers et les affiche.
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:

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
 
#!/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.