[pygtk] pixmap question...

Rory Walsh rorywalsh at ear.ie
Sat Oct 13 18:58:21 WST 2007


I'm trying to animate a line being drawn across the screen. My first 
attempt using only a drawingarea proved fruitless so I am now trying it 
using a pixmap and a drawing area. I have the following code which is 
hacked from several bits of code I found online. I'm confused as to how 
I am supposed to update the the drawing area with the pixmap image? 
Here's the code, can anyone spot any obvious silliness?

Rory.

p.s. I posted this yesterday but I think it got caught up somewhere in a 
different thread, sorry about the noise..


import pygtk
pygtk.require('2.0')
import gtk
import gobject
import math

xcor = 0

def pix_init(d_area, width, height):
     d_area.realize()
     win = d_area.window
     pixmap = gtk.gdk.Pixmap(win, width, height, -1)
     context = win.new_gc()
     cmap = d_area.get_colormap()
     context.foreground = cmap.alloc_color(128*64,128*64,128*64)
     for x in range(width):
         pixmap.draw_point(context, x, height / 2)
     d_area.connect("expose-event", pix_expose, pixmap)
     return pixmap

def pix_expose(da, event, pixmap):
     x, y, width, height = da.get_allocation()
     da.window.draw_drawable(
     da.get_style().fg_gc[0], pixmap, 0, 0, 0, 0, -1, -1)

def draw(da, pixmap):
     global xcor
     win = da.window
     context = win.new_gc()
     pixmap.draw_point(context, xcor, 100)
     da.queue_draw()
     xcor=xcor+1
     print xcor
     return True

def redraw_timeout(da, pixmap):
     #da.window.invalidate_rect((0,0,200,200),False)
     return True

def main():
     global xcor
     xcor = 0
     width,height=640,480
     top = gtk.Window(gtk.WINDOW_TOPLEVEL)
     da = gtk.DrawingArea()
     #print dir(da)
     da.set_size_request(width, height)
     top.add(da)
     pixmap=pix_init(da, width, height)
     top.show_all()
     gobject.timeout_add(120,draw,da,pixmap)
     gtk.main()

if __name__ =="__main__":
     main()


More information about the pygtk mailing list