m0_58318430 2021-05-20 14:25 采纳率: 100%
浏览 32
已采纳

在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

  • 写回答

2条回答 默认 最新

  • CSDN专家-HGJ 2021-05-20 14:49
    关注

    代码中间的一些语句顺序颠倒了,会导致没有定义或对象没有xxx属性的错误,修改如下,可以正常显示。

    import wx
    import numpy as np
    import matplotlib.pyplot as plt
    from matplotlib.backends.backend_wxagg import FigureCanvasWxAgg as FigureCanvas
    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):  # 事件处理
            x = np.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.figure = plt.Figure()
            self.axes = self.figure.add_subplot(221)
            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.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条)

报告相同问题?

悬赏问题

  • ¥15 js调用html页面需要隐藏某个按钮
  • ¥15 ads仿真结果在圆图上是怎么读数的
  • ¥20 Cotex M3的调试和程序执行方式是什么样的?
  • ¥20 java项目连接sqlserver时报ssl相关错误
  • ¥15 一道python难题3
  • ¥15 牛顿斯科特系数表表示
  • ¥15 arduino 步进电机
  • ¥20 程序进入HardFault_Handler
  • ¥15 oracle集群安装出bug
  • ¥15 关于#python#的问题:自动化测试