#!/usr/bin/env python
"""
An animated image
"""
import sys, time, os, gc
from matplotlib import rcParams
from matplotlib.matlab import *
import gtk
# if hold is on the axes images will accumulate and your performance
# will tank!
rc('axes', hold=False)
class HandleDraws:
drawing_idle_id = 0
shape = 100,100 # image size
cnt = 0
def __init__(self):
self.fig = figure(1)
self.a1 = subplot(211)
self.a2 = subplot(212)
def idle_update(self, *args):
'only call a draw if gtk is idle'
if self.cnt==0: self.tstart = time.time()
draw()
self.drawing_idle_id = 0
self.cnt += 1
if self.cnt>=50:
print 'FPS', self.cnt/(time.time() - self.tstart)
sys.exit()
return False
def update1(self, data):
if self.drawing_idle_id == 0:
self.a1.imshow(data, interpolation='nearest')
self.drawing_idle_id = gtk.idle_add(self.idle_update)
else: print 'dropping frame for axes 1'
def update2(self, data):
if self.drawing_idle_id == 0:
self.a2.imshow(data, interpolation='nearest')
self.drawing_idle_id = gtk.idle_add(self.idle_update)
else: print 'dropping frame for axes 2'
handler = HandleDraws()
def generate_events(*args):
data = rand(100,100)
# randomly pick which axes to update
if rand()>0.5: handler.update1(data)
else: handler.update2(data)
return True
cnt = 0
gtk.timeout_add(10, generate_events)
show()