[pygtk] newbie drawingarea question..

Steve McClure smcclure at racemi.com
Sat Oct 13 02:00:14 WST 2007


On an expose, you have to draw everything that is exposed.  The  
drawingarea has no memory.

The event will contain an indication of the exposure area. My  
reference code is very old, gtk 1.x so this has probably changed, but  
it used to be event.area contained (x, y, width, height) of the  
exposed area.

Then you have to go to your data store, or logic, to know if you have  
something to redraw in that given area.

On Oct 12, 2007, at 1:15 PM, Rory Walsh wrote:

> I'm trying to animate the drawing of a line using drawingarea but  
> I'm having some difficulty. I thought that I could just call  
> draw_point() and increment the X coordinate each time but my old  
> points are not staying on the screen? My code is below, any ideas?
>
> import pygtk
> pygtk.require('2.0')
> import gtk
> import gobject
> import math
>
> def redraw_timeout(object):
>     object.window.invalidate_rect((0,0,200,200),False)
>     return True
> 	
> class drawSomething:
> 	x = 0
> 	def on_expose(self, drawingarea, event):
> 	    # get the GdkWindow
> 	    self.window = event.window
> 	    # get the GC
> 	    gc = self.window.new_gc()
> 	    # draw a line?
> 	    self.drawingarea.window.draw_point(gc, self.x, 100)
> 	    self.x = self.x+1
> 	    if(self.x>200):
> 	    	self.x = 0
>
> 	def __init__(self):
> 		self.win = gtk.Window()
> 		self.win.connect("destroy", gtk.mainquit)
> 		self.win.show()
> 		self.drawingarea = gtk.DrawingArea()
> 		self.drawingarea.connect("expose-event", self.on_expose)
> 		self.drawingarea.show()
> 		self.win.add(self.drawingarea)
> 		
> 	def main(self):
> 		self.drawingarea.show()
> 		gtk.main()
>
>
> 		
> # enter the mainloop
> if __name__ == "__main__":
>     draw = drawSomething()
>     source_id = gobject.timeout_add(1, redraw_timeout, draw)
>     draw.main()
>
> regards,
> Rory.
> _______________________________________________
> pygtk mailing list   pygtk at daa.com.au
> http://www.daa.com.au/mailman/listinfo/pygtk
> Read the PyGTK FAQ: http://www.async.com.br/faq/pygtk/
>

--
Steve McClure
smcclure at racemi.com




More information about the pygtk mailing list