m0_58318430 2021-05-20 14:31 采纳率: 100%
浏览 19
已采纳

在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
  • 写回答

1条回答 默认 最新

  • 天元浪子 Python领域优质创作者 2021-05-20 16:44
    关注
    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()

     

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 请看一下,学校实验要求
  • ¥50 pc微信3.6.0.18不能登陆 有偿解决问题
  • ¥15 求TYPCE母转母转接头24PIN线路板图
  • ¥100 国外网络搭建,有偿交流
  • ¥15 高价求中通快递查询接口
  • ¥15 解决一个加好友限制问题 或者有好的方案
  • ¥15 急matlab编程仿真二阶震荡系统
  • ¥20 TEC-9的数据通路实验
  • ¥15 ue5 .3之前好好的现在只要是激活关卡就会崩溃
  • ¥50 MATLAB实现圆柱体容器内球形颗粒堆积