📄 dynamic_demo_wx.py
字号:
#!/usr/bin/env python"""Copyright (C) Jeremy O'Donoghue, 2003 License: This work is licensed under the PSF. A copy should be includedwith this source code, and is also available athttp://www.python.org/psf/license.htmlThis is a sample showing how to embed a matplotlib figure in a wxPanel,and update the contents whenever a timer event occurs. It is inspiredby the GTK script dynamic_demo.py, by John Hunter (should be supplied withthis file) but I have assumed that you may wish to embed a figure insideyour own arbitrary frame, which makes the code slightly more complicated.It goes without saying that you can update the display on any event, notjust a timer...Should you require a toolbar and navigation, inspire yourself fromembedding_in_wx.py, which provides these features.Modification History:$Log: dynamic_demo_wx.py,v $Revision 1.7 2005/06/15 20:24:56 jdh2358syncing for 82Revision 1.6 2004/10/26 18:08:13 astrawConverted to use new NavigationToolbar2 (from old Toolbar).Revision 1.5 2004/06/26 06:37:20 astrawTrivial bugfix to eliminate IndexErrorRevision 1.4 2004/05/03 12:12:26 jdh2358added bang header to examplesRevision 1.3 2004/03/08 22:17:20 jdh2358* Fixed embedding_in_wx and dynamic_demo_wx examples* Ported build to darwin* Tk: removed default figman=None from nav toolbar since it needs the figman fixed close bug small changes to aid darwin buildRevision 1.2 2004/02/26 20:22:58 jaytmillerAdded the "numerix" Numeric/numarray selector module enabling matplotlibto work with either numarray or Numeric. See matplotlib.numerix.__doc__.Revision 1.1 2003/12/30 17:22:09 jodonoghueFirst version of dynamic_demo for backend_wx"""import matplotlibmatplotlib.use('WX')from matplotlib.backends.backend_wx import FigureCanvasWx,\ FigureManager, NavigationToolbar2Wxfrom matplotlib.figure import Figurefrom matplotlib.axes import Subplotimport matplotlib.numerix as numpyfrom wxPython.wx import *TIMER_ID = wxNewId()class PlotFigure(wxFrame): def __init__(self): wxFrame.__init__(self, None, -1, "Test embedded wxFigure") self.fig = Figure((5,4), 75) self.canvas = FigureCanvasWx(self, -1, self.fig) self.toolbar = NavigationToolbar2Wx(self.canvas) self.toolbar.Realize() # On Windows, default frame size behaviour is incorrect # you don't need this under Linux tw, th = self.toolbar.GetSizeTuple() fw, fh = self.canvas.GetSizeTuple() self.toolbar.SetSize(wxSize(fw, th)) # Create a figure manager to manage things self.figmgr = FigureManager(self.canvas, 1, self) # Now put all into a sizer sizer = wxBoxSizer(wxVERTICAL) # This way of adding to sizer allows resizing sizer.Add(self.canvas, 1, wxLEFT|wxTOP|wxGROW) # Best to allow the toolbar to resize! sizer.Add(self.toolbar, 0, wxGROW) self.SetSizer(sizer) self.Fit() EVT_TIMER(self, TIMER_ID, self.onTimer) def init_plot_data(self): a = self.fig.add_subplot(111) self.ind = numpy.arange(60) tmp = [] for i in range(60): tmp.append(numpy.sin((self.ind+i)*numpy.pi/15)) self.X = numpy.array(tmp) self.lines = a.plot(self.X[:,0],'o') self.count = 0 def GetToolBar(self): # You will need to override GetToolBar if you are using an # unmanaged toolbar in your frame return self.toolbar def onTimer(self, evt): self.count += 1 if self.count >= 60: self.count = 0 self.lines[0].set_data(self.ind, self.X[:,self.count]) self.canvas.draw() self.canvas.gui_repaint() if __name__ == '__main__': app = wxPySimpleApp() frame = PlotFigure() frame.init_plot_data() # Initialise the timer - wxPython requires this to be connected to the # receivicng event handler t = wxTimer(frame, TIMER_ID) t.Start(100) frame.Show() app.MainLoop()
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -