At 07.05.2009 14:46, Philip Cavaco wrote:
Hello,
I want to put this question out there before diving into the code. I am
trying to write a python script which can update the active_display
multiple times within the same script. Basically an animation.
I have been experimenting with the different update methods
(add_update_all, update_connectitons, update_extends, flush) at
different levels (dia, dia.active_display(), dia.active_display().diagram).
Does anyone have suggestions on how I can get this working?
Given that display drawing is done in idle update your blinking needs allow
idle to happen. Updated script attached.
Hans
-------- Hans "at" Breuer "dot" Org -----------
Tell me what you need, and I'll tell you how to
get along without it. -- Dilbert
import dia
import time
import gobject
class Blinker :
def __init__ (self, d, e, i) :
self.repeats = i
self.dia = d
self.ell = e
def blink (self) :
n = self.repeats
self.repeats -= 1
# requeue this handler
if n % 2 == 0 :
self.ell.properties['fill_colour'] = "red"
else :
self.ell.properties['fill_colour'] = "white"
self.dia.add_update_all()
self.dia.flush()
return n > 0
def main(data,flags):
"""
Arguments:
- `data`:
- `flags`:
"""
d= dia.active_display().diagram
layer = d.data.active_layer
objects = layer.objects
#find an ellipse object
ellipse = None
for obj in objects:
if obj.type.name == "Standard - Ellipse":
ellipse = obj
break
if not ellipse:
#no ellipse was found don't do anything
return
b = Blinker(d, ellipse, 10)
gobject.timeout_add(250, b.blink)
dia.register_action("Blinker","Blinker",
"/DisplayMenu/Dialogs/DialogsExtensionStart",
main)
_______________________________________________
dia-list mailing list
[email protected]
http://mail.gnome.org/mailman/listinfo/dia-list
FAQ at http://live.gnome.org/Dia/Faq
Main page at http://live.gnome.org/Dia