如何刷新wx.auinotebook中的pyplots

最后发布: 2014-03-09 06:03:25


问题

在下面的代码中,单击按钮时,我将图插入另一帧auinotebook的选项卡中。

例如,当我在plt窗口中有多个图时,可以将一个笔记本选项卡拖到底部(这将显示两个图)。 稍后,当我删除底部的标签并尝试进入其他图表时,我看到闪烁的画面,就像关闭的标签仍然存在。

我想问题出在我的on_nb_tab_close。 因为没有它,我无法注意到任何此类问题。

感谢您的帮助。 代码示例将非常有用。 (wxpython版本2.812)

import wx
import wx.lib.agw.aui as aui
import matplotlib as mpl
from matplotlib.backends.backend_wxagg import FigureCanvasWxAgg as mplCanvas

def create_plotter(self):
    try:
        self.plotter.Show()
    except AttributeError:
        self.plotter =PlotFrame(self, 500, 500)
        self.plotter.Show() 
    return self.plotter

class PlotFrame(wx.Frame):
    def __init__(self, parent, height, width):         
        wx.Frame.__init__(self, None, size=(height,width), title="plts")        
        self.parent=parent  
        self.nb = aui.AuiNotebook(self)    
        self.Bind(aui.EVT_AUINOTEBOOK_PAGE_CLOSE, self.on_nb_tab_close, self.nb)

    def AddPlotTab(self,name="plot"):
        page = Plot(self.nb)
        self.nb.AddPage(page,name)
        return page

    def on_nb_tab_close(self, evt):
        print "tab close fired"
        s=self.nb.GetSelection()
        v=self.nb.RemovePage(s)     
        if not self.nb.GetPageCount():
            self.on_Close(evt)       
        evt.Veto()

class Plot(wx.Panel):
 def __init__(self, parent, id = -1, dpi = None, **kwargs):
        wx.Panel.__init__(self, parent, id=id, **kwargs)
        self.figure = mpl.figure.Figure(dpi=dpi) 
        self.canvas = mplCanvas(self, -1, self.figure) # wxPanel object containing plot
        sizer = wx.BoxSizer(wx.VERTICAL)
        sizer.Add(self.canvas,1,wx.EXPAND)
        self.SetSizer(sizer)

class MainFrame(wx.Frame):
    def __init__(self, parent):
        wx.Frame.__init__(self, parent, title="Plotting test", size=(300, 300))    
        self.btn1 = wx.Button(self, -1, "Print 1")
        self.Bind(wx.EVT_BUTTON, self.OnBtn1, self.btn1)

    def OnBtn1(self, evt):
        plotter=create_plotter(self)
        page1 = plotter.AddPlotTab("case 1: first_plot")  
        page1.figure.gca().plot(range(10),range(10),'+')
        page1.figure.gca().plot(range(10),range(10),'-',color='red')
        page1.figure.canvas.draw()
if __name__ == '__main__':
    APP = wx.App(False)
    FRAME = MainFrame(None)
    FRAME.Show()
    APP.MainLoop()
matplotlib wxpython