在WXpy中绑定按钮事件触发matplotil中的画图功能

在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()