1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126
| import matplotlib import matplotlib.cm as cm import matplotlib.cbook as cbook from matplotlib.backends.backend_wxagg import FigureCanvasWxAgg as FigureCanvas from matplotlib.backends.backend_wxagg import NavigationToolbar2WxAgg as NavigationToolbar from matplotlib.figure import Figure import numpy as np
import wx import wx.xrc as xrc
ERR_TOL = 1e-5
matplotlib.rc('image', origin='lower')
class PlotPanel(wx.Panel): def __init__(self, parent): wx.Panel.__init__(self, parent, -1)
self.fig = Figure((5, 4), 75) self.canvas = FigureCanvas(self, -1, self.fig) self.toolbar = NavigationToolbar(self.canvas) self.toolbar.Realize()
sizer = wx.BoxSizer(wx.VERTICAL) sizer.Add(self.canvas, 1, wx.LEFT | wx.TOP | wx.GROW) sizer.Add(self.toolbar, 0, wx.GROW) self.SetSizer(sizer) self.Fit()
def init_plot_data(self): a = self.fig.add_subplot(111)
x = np.arange(120.0) * 2 * np.pi / 60.0 y = np.arange(100.0) * 2 * np.pi / 50.0 self.x, self.y = np.meshgrid(x, y) z = np.sin(self.x) + np.cos(self.y) self.im = a.imshow(z, cmap=cm.RdBu)
zmax = np.max(z) - ERR_TOL ymax_i, xmax_i = np.nonzero(z >= zmax) if self.im.origin == 'upper': ymax_i = z.shape[0] - ymax_i self.lines = a.plot(xmax_i, ymax_i, 'ko')
self.toolbar.update()
def GetToolBar(self): return self.toolbar
def OnWhiz(self, evt): self.x += np.pi / 15 self.y += np.pi / 20 z = np.sin(self.x) + np.cos(self.y) self.im.set_array(z)
zmax = np.max(z) - ERR_TOL ymax_i, xmax_i = np.nonzero(z >= zmax) if self.im.origin == 'upper': ymax_i = z.shape[0] - ymax_i self.lines[0].set_data(xmax_i, ymax_i)
self.canvas.draw()
class MyApp(wx.App): def OnInit(self): xrcfile = cbook.get_sample_data('embedding_in_wx3.xrc', asfileobj=False) print('loading', xrcfile)
self.res = xrc.XmlResource(xrcfile)
self.frame = self.res.LoadFrame(None, "MainFrame") self.panel = xrc.XRCCTRL(self.frame, "MainPanel")
plot_container = xrc.XRCCTRL(self.frame, "plot_container_panel") sizer = wx.BoxSizer(wx.VERTICAL)
self.plotpanel = PlotPanel(plot_container) self.plotpanel.init_plot_data()
sizer.Add(self.plotpanel, 1, wx.EXPAND) plot_container.SetSizer(sizer)
whiz_button = xrc.XRCCTRL(self.frame, "whiz_button") whiz_button.Bind(wx.EVT_BUTTON, self.plotpanel.OnWhiz)
bang_button = xrc.XRCCTRL(self.frame, "bang_button") bang_button.Bind(wx.EVT_BUTTON, self.OnBang)
sizer = self.panel.GetSizer() self.frame.Show(1)
self.SetTopWindow(self.frame)
return True
def OnBang(self, event): bang_count = xrc.XRCCTRL(self.frame, "bang_count") bangs = bang_count.GetValue() bangs = int(bangs) + 1 bang_count.SetValue(str(bangs))
if __name__ == '__main__': app = MyApp(0) app.MainLoop()
|