在wxpy中建立了一个窗口按钮,并且想通过单击事件,得到已有的函数图像。但是中间绑定的代码可能有点欠缺。
代码如下:
import wx
class MyFrame(wx.Frame):
def __init__(self):
wx.Frame.__init__ (self,None,-1,title="沥青路面设计与验算",pos=(100,100), size=(700,600))
panel = wx.Panel(parent=self)
self.btn = wx.Button(panel,-1,label='OK',pos=(600,500)) #设置按钮
self.Bind(wx.EVT_BUTTON,self.draw,self.btn)
def draw(self,event): #事件处理
x = arange(-3.0, 3.0, 0.01)
y1 = 3+0*x
y2= 2+0*x
y3= 0+0*x
y4=x
y5=-3+0*x
self.axes.plot(x, y4)
self.axes.plot(x,y1)
self.axes.plot(x,y2)
self.axes.plot(x,y3)
self.axes.plot(x,y5)
self.axes.grid(color='r', linestyle='--', linewidth=1,alpha=0.3)
self.figure = Figure()
self.axes = self.figure.add_subplot(221)
self.canvas = FigureCanvas(self, -1, self.figure)
self.sizer = wx.BoxSizer(wx.VERTICAL)
self.sizer.Add(self.canvas, 1, wx.LEFT | wx.TOP)
self.SetSizer(self.sizer)
self.Fit()
if __name__ == "__main__":
app = wx.App()
frm = MyFrame()
frm.Show()
frm.draw()
app.MainLoop()
del app
import wx
import numpy as np
from matplotlib.backends import backend_wxagg
from matplotlib.figure import Figure
class MyFrame(wx.Frame):
"""自定义窗口派生类"""
def __init__(self):
"""构造函数"""
wx.Frame.__init__(self, None, -1, title="沥青路面设计与验算", size=(700,600))
self.SetBackgroundColour(wx.Colour(224, 224, 224))
self.Center()
self.canvas = backend_wxagg.FigureCanvasWxAgg(self, -1, Figure())
btn1 = wx.Button(self, -1, label='单轴子图', size=(80,-1), name='btn1')
btn2 = wx.Button(self, -1, label='多轴子图', size=(80,-1), name='btn2')
btn_sizer = wx.BoxSizer()
btn_sizer.Add(btn1, 0, wx.RIGHT, 50)
btn_sizer.Add(btn2, 0, wx.LEFT, 50)
max_sizer = wx.BoxSizer(wx.VERTICAL)
max_sizer.Add(self.canvas, 1, wx.EXPAND|wx.ALL, 0)
max_sizer.Add(btn_sizer, 0, wx.CENTER|wx.ALL, 10)
self.SetAutoLayout(True)
self.SetSizer(max_sizer)
self.Layout()
self.Bind(wx.EVT_BUTTON, self.on_draw)
def on_draw(self, evt):
"""按钮事件响应函数"""
x = np.arange(-3.0, 3.0, 0.01)
obj = evt.GetEventObject()
name = obj.GetName()
if name == 'btn1':
self.canvas.figure.clear()
ax = self.canvas.figure.add_axes((0.1,0.1,0.8,0.8))
ax.plot(x, x)
ax.plot(x, np.sin(x))
ax.plot(x, x*x)
ax.plot(x, np.cos(x))
ax.grid(color='r', linestyle='--', linewidth=1, alpha=0.3)
self.canvas.draw()
else:
self.canvas.figure.clear()
ax = self.canvas.figure.add_subplot(221)
ax.plot(x, x, c='b')
ax = self.canvas.figure.add_subplot(222)
ax.plot(x, np.sin(x), c='m')
ax = self.canvas.figure.add_subplot(223)
ax.plot(x, x*x, c='g')
ax = self.canvas.figure.add_subplot(224)
ax.plot(x, np.cos(x), c='r')
self.canvas.draw()
if __name__ == "__main__":
app = wx.App()
frm = MyFrame()
frm.Show()
app.MainLoop()