I looked at more examples on the web and they all do the drawing as response to an expose event. The expose event is triggered using gtk_widget_queue_draw_area (or the equivalent more intuitive window.invalidate_rect in PyGTK).
So I think this is really how it should be done.
