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()
_______________________________________________
pygtk mailing list   [email protected]
http://www.daa.com.au/mailman/listinfo/pygtk
Read the PyGTK FAQ: http://www.async.com.br/faq/pygtk/

Reply via email to