嵌入Wx5

  1. import wx
  2. import wx.lib.agw.aui as aui
  3. import wx.lib.mixins.inspection as wit
  4. import matplotlib as mpl
  5. from matplotlib.backends.backend_wxagg import FigureCanvasWxAgg as FigureCanvas
  6. from matplotlib.backends.backend_wxagg import NavigationToolbar2WxAgg as NavigationToolbar
  7. class Plot(wx.Panel):
  8. def __init__(self, parent, id=-1, dpi=None, **kwargs):
  9. wx.Panel.__init__(self, parent, id=id, **kwargs)
  10. self.figure = mpl.figure.Figure(dpi=dpi, figsize=(2, 2))
  11. self.canvas = FigureCanvas(self, -1, self.figure)
  12. self.toolbar = NavigationToolbar(self.canvas)
  13. self.toolbar.Realize()
  14. sizer = wx.BoxSizer(wx.VERTICAL)
  15. sizer.Add(self.canvas, 1, wx.EXPAND)
  16. sizer.Add(self.toolbar, 0, wx.LEFT | wx.EXPAND)
  17. self.SetSizer(sizer)
  18. class PlotNotebook(wx.Panel):
  19. def __init__(self, parent, id=-1):
  20. wx.Panel.__init__(self, parent, id=id)
  21. self.nb = aui.AuiNotebook(self)
  22. sizer = wx.BoxSizer()
  23. sizer.Add(self.nb, 1, wx.EXPAND)
  24. self.SetSizer(sizer)
  25. def add(self, name="plot"):
  26. page = Plot(self.nb)
  27. self.nb.AddPage(page, name)
  28. return page.figure
  29. def demo():
  30. # alternatively you could use
  31. #app = wx.App()
  32. # InspectableApp is a great debug tool, see:
  33. # http://wiki.wxpython.org/Widget%20Inspection%20Tool
  34. app = wit.InspectableApp()
  35. frame = wx.Frame(None, -1, 'Plotter')
  36. plotter = PlotNotebook(frame)
  37. axes1 = plotter.add('figure 1').gca()
  38. axes1.plot([1, 2, 3], [2, 1, 4])
  39. axes2 = plotter.add('figure 2').gca()
  40. axes2.plot([1, 2, 3, 4, 5], [2, 1, 4, 2, 3])
  41. frame.Show()
  42. app.MainLoop()
  43. if __name__ == "__main__":
  44. demo()

下载这个示例