Hi Darren,
thanks for replying

On Wed, May 27, 2009 at 21:01, Darren Dale <dsdal...@gmail.com> wrote:
> On Wed, May 27, 2009 at 9:11 AM, Sandro Tosi <mo...@debian.org> wrote:
>>
>> Hi all,
>> I'd like to adapt 'animation_blit_qt4.py' to a pure OO approach,
>> removing pylab from the code and move to something near to
>> 'embedding_in_qt4.py'.
>>
>> I tried a bit but failed miserably :(
>>
>> What I'd like to achieve is use something like in
>> 'embedding_in_qt4.py' but that can be updated using the timerEvent /
>> startTime paradigm (something similar to gobject.add_idle(func) but
>> this time for Qt4).
>>
>> Can someone please give me a help on this?
>
> Can you be more specific? Maybe post what you have along with a description
> of how it is failing?

Eheh, sorry for being so generic: I wrote that email from work, while
the code I've worked on was at home ;)

So, the situation is this:

- animation_blit_qt4.py has a nice way to update the graph "online",
using the timerEvent/startTimer
- animation_blit_qt4.py contains pylab staff (I want to avoid using)
- animation_blit_qt4.py uses the backend Qt4Agg not the backend object
- embedding_in_qt4.py uses an OO approach at embedding mpl in a qt4
widget/application.

The ultimate result I want to achieve is to embed mpl in a qt4
application but update the graph in realtime.

So I started modifying animation_blit_qt4.py to make it "more OO" :)

The attached script "animation_blit_qt4_morph.py" only replaced the
pylab parts with a mix of OO style and pyplot, and the timerEvent just
print the receive event without updating the graph.

As you can see, not much of what I need :(

What I'd like to achive is something similar to
"embedding_in_qt4_morph.py" but where the graph is updated
automatically like in an animation.

Your help will be appreciated a lot :)

Thanks,
-- 
Sandro Tosi (aka morph, morpheus, matrixhasu)
My website: http://matrixhasu.altervista.org/
Me at Debian: http://wiki.debian.org/SandroTosi
# For detailed comments on animation and the techniqes used here, see
# the wiki entry http://www.scipy.org/Cookbook/Matplotlib/Animations

import os, sys
import matplotlib
matplotlib.use('Qt4Agg') # qt4 example
# matplotlib Figure object
from matplotlib.figure import Figure
import matplotlib.backends.backend_qt4agg as backend

from PyQt4 import QtCore, QtGui

ITERS = 1000

#import pylab as p
import matplotlib.pyplot as plt
import numpy as npy
import time

class BlitQT(QtCore.QObject):#, backend.FigureCanvas):
    def __init__(self):
        self.fig = Figure()
        self.ax = self.fig.add_subplot(111)
        self.canvas = self.ax.figure.canvas
        self.ax.grid()

        # By making this a child of the canvas we make sure that it is
        # destroyed first and avoids a possible exception when the user clicks
        # on the window's close box.
        QtCore.QObject.__init__(self, self.canvas)

        self.cnt = 0

        # create the initial line
        self.x = npy.arange(0,2*npy.pi,0.01)
        self.line, = self.ax.plot(self.x, npy.sin(self.x), animated=True, lw=2)

        #self.background = None
        #self.old_size = 0, 0
        plt.draw()
        #backend.show()


    def timerEvent(self, evt):
        # See if the size has changed since last time round.
        #current_size = self.ax.bbox.width, self.ax.bbox.height
        print evt

        #if self.old_size != current_size:
        #    self.old_size = current_size
        #    self.background = self.canvas.copy_from_bbox(self.ax.bbox)

        # restore the clean slate background
        #self.canvas.restore_region(self.background)
        # update the data
        self.line.set_ydata(npy.sin(self.x+self.cnt/10.0))
        plt.draw()
        # just draw the animated artist
        #self.ax.draw_artist(self.line)
        # just redraw the axes rectangle
        #self.canvas.blit(self.ax.bbox)

        if self.cnt==ITERS:
            # print the timing info and quit
            print 'FPS:' , ITERS/(time.time()-self.tstart)
            sys.exit()

        else:
            self.cnt += 1

#p.subplots_adjust(left=0.3, bottom=0.3) # check for flipy bugs
#p.grid() # to ensure proper background restore

app = BlitQT()
# for profiling
app.tstart = time.time()
app.startTimer(100)
backend.show()
#!/usr/bin/env python

# for command-line arguments
import sys
# Python Qt4 bindings
from PyQt4 import QtGui

# standard Matplotlib imports
import numpy as np
from matplotlib.backends.backend_qt4agg import FigureCanvasQTAgg as FigureCanvas
from matplotlib.figure import Figure


class Qt4MplCanvas(FigureCanvas):
    """Ultimately, this is a QWidget (as well as a FigureCanvasAgg, etc.)."""
    def __init__(self):
        self.fig = Figure()
        self.axes = self.fig.add_subplot(111)
        # We want the axes cleared every time plot() is called
        self.axes.hold(False)

        self.x = np.arange(0.0, 3.0, 0.01)
        self.y = np.cos(2*np.pi*self.x)
        self.axes.plot(self.x, self.y)

        FigureCanvas.__init__(self, self.fig)



qApp = QtGui.QApplication(sys.argv)

mpl = Qt4MplCanvas()

mpl.show()

sys.exit(qApp.exec_())
------------------------------------------------------------------------------
Register Now for Creativity and Technology (CaT), June 3rd, NYC. CaT 
is a gathering of tech-side developers & brand creativity professionals. Meet
the minds behind Google Creative Lab, Visual Complexity, Processing, & 
iPhoneDevCamp as they present alongside digital heavyweights like Barbarian 
Group, R/GA, & Big Spaceship. http://p.sf.net/sfu/creativitycat-com 
_______________________________________________
Matplotlib-users mailing list
Matplotlib-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-users

Reply via email to