Cairo, GTK og Python: Problemmer med af få gentegnet widget.
Hvordan sørger man for at få gentegnet vinduet igen og igen?Jeg får tegnet det fint med expose metoden:
def expose(self, da, event):
global CTXen
global DAen
ctx = da.window.cairo_create()
ctx.set_source_rgb(0, 0, 0)
ctx.set_line_width(SIZE / 4)
ctx.set_tolerance(0.1)
ctx.set_line_join(cairo.LINE_JOIN_ROUND)
ViewManager.draw(Tree.getroot(), ctx)
CTXen = ctx
DAen = da
Jeg forsøger så at opdatere ved hjælp af en timer:
gobject.timeout_add(100, self.update)
Som så kører en update-metode:
def update(self):
global CTXen
global DAen
if CTXen is not None:
alloc = DAen.get_allocation()
rect = gtk.gdk.Rectangle(0, 0, alloc.width, alloc.height)
DAen.window.invalidate_rect(rect, True)
ViewManager.draw(Tree.getroot(), CTXen)
DAen.window.process_updates(True)
return True
Men jeg får fejlen:
Traceback (most recent call last):
File "server.py", line 70, in update
ViewManager.draw(Tree.getroot(), CTXen)
File "../common/ViewManager.py", line 158, in draw
ctx.fill_preserve()
cairo.Error: the target surface has been finished
Jeg er åben overfor pænere måder at opbygge det på. Bare jeg får den til at gentegne.
