Hi,
Restore_region does not appear to work when embedding mpl into
wxpython. Attached is a simple modification of the cookbook animation
(http://www.scipy.org/Cookbook/Matplotlib/Animations) to illustrate
this problem. I modified the example so it is updated on mouse
movements (followed by idle time) so that the problem is more visual.
There is also a flag to add one second timeouts between commands in
the update method. When looking at the slowed animation it is clear
that the background is never restored.
Michiel Hoon thinks that the problem is due to the fact that
restore_region is not implemented within the event loop and that the
proper solution requires discussion:)

Elan
---
Of joys departed, not to return, how painful the remembrance.
- Robert Blair
#!/usr/bin/env python

import matplotlib
matplotlib.use('WXAgg')
import matplotlib.numerix as nx

from matplotlib.backends.backend_wxagg import FigureCanvasWxAgg as FigCanvas
import wx
import time

# A flag to pause between every command in the update stage
slowdown=False
#--------------------------------------------------------------------------------------
class MainFrame(wx.Frame,matplotlib.figure.Figure):
    """Main frame for a simple graph."""
    def __init__(self, parent, id):
        wx.Frame.__init__(self,None,-1)
        
        # creating the matplotlib figure and canvas.
        self._fig = matplotlib.figure.Figure( None)
        self.canvas = FigCanvas(self, wx.ID_ANY, self._fig )

        
        # creating some data
        self.x = nx.arange(0,2*nx.pi,0.01)


        # adding the suplot and a line.                
        self.ax = self._fig.add_subplot(111)
        self.line, = self.ax.plot(self.x, nx.sin(self.x), animated=True)
        if slowdown==True:
            time.sleep(1)
        
        # save the clean slate background -- everything but the animated line
        # is drawn and saved in the pixel buffer background
        self.background = self._fig.canvas.copy_from_bbox(self.ax.bbox)
        
        
        # Update when there is idle time. Note that this will only refire when 
        # something happens (such as a mouse movement) this will allow
        # a better view of the dynamics of the updates.
        self.Bind(wx.EVT_IDLE, self.update_line)
        
        # a variable to induce change
        self.update_line_cnt=0

        
        
        return
    #--------------------------------------------------------------------------------------
    def update_line(self,event):
        """ This function will update and redraw the data"""
        
        # update the data
        self.line.set_ydata(nx.sin(self.x+self.update_line_cnt/20.0))
                
        # restore the clean slate background
        self._fig.canvas.restore_region(self.background)
        if slowdown==True:
            time.sleep(1)
            
        # just draw the animated artist
        self.ax.draw_artist(self.line)
        if slowdown==True:
            time.sleep(1)
        
        # just redraw the axes rectangle
        self._fig.canvas.blit(self.ax.bbox)
        if slowdown==True:
            time.sleep(1)

        # Uncomment to speed up updates without actions.
        #event.RequestMore(True)
            
        #Getting some changes
        self.update_line_cnt+=1
        
        return True

#--------------------------------------------------------------------------------------
if __name__ == '__main__':
    
    App=wx.App() 
    frame=MainFrame(None,-1)
    frame.Show(True)
    App.MainLoop()  







------------------------------------------------------------------------------
The NEW KODAK i700 Series Scanners deliver under ANY circumstances! Your
production scanning environment may not be a perfect world - but thanks to
Kodak, there's a perfect scanner to get the job done! With the NEW KODAK i700
Series Scanner you'll get full speed at 300 dpi even with all image 
processing features enabled. http://p.sf.net/sfu/kodak-com
_______________________________________________
Matplotlib-devel mailing list
Matplotlib-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-devel

Reply via email to