测试怎么将MatPlotLib嵌入到wxPython中

 我来答
就烦条0o
2016-08-05 · 知道合伙人软件行家
就烦条0o
知道合伙人软件行家
采纳数:33315 获赞数:46494
从事多年系统运维,喜欢编写各种小程序和脚本。

向TA提问 私信TA
展开全部
# -*- coding: utf-8 -*-  
###############################################################################  
#  wxMPL_test.pyw  
#author: Wu Xuping  
#Date : 2013-09-15  
#测试如何将MatPlotLib嵌入到wxPython中  
###############################################################################  
import numpy as np  
import wx  
import matplotlib  
  
# matplotlib采用WXAgg为后台,将matplotlib嵌入wxPython中  
matplotlib.use("WXAgg")  
from matplotlib.backends.backend_wxagg import FigureCanvasWxAgg as FigureCanvas  
from matplotlib.figure import Figure  
from matplotlib.backends.backend_wx import NavigationToolbar2Wx as NavigationToolbar  
  
######################################################################################  
class MPL_Panel(wx.Panel):  
    ''''' #MPL_Panel面板,可以继承或者创建实例'''  
    def __init__(self,parent):    
        wx.Panel.__init__(self,parent=parent, id=-1)    
    
        self.Figure = matplotlib.figure.Figure(figsize=(4,3))    
        self.axes = self.Figure.add_axes([0.1,0.1,0.8,0.8])    
        self.FigureCanvas = FigureCanvas(self,-1,self.Figure)    
            
        #继承鼠标移动显示鼠标处坐标的事件    
        self.FigureCanvas.mpl_connect('motion_notify_event',self.MPLOnMouseMove)    
            
        self.NavigationToolbar = NavigationToolbar(self.FigureCanvas)    
    
        self.StaticText = wx.StaticText(self,-1,label='Show Help String')    
    
        self.SubBoxSizer = wx.BoxSizer(wx.HORIZONTAL)    
        self.SubBoxSizer.Add(self.NavigationToolbar,proportion =0, border = 2,flag = wx.ALL | wx.EXPAND)    
        self.SubBoxSizer.Add(self.StaticText,proportion =-1, border = 2,flag = wx.ALL | wx.EXPAND)    
    
        self.TopBoxSizer = wx.BoxSizer(wx.VERTICAL)    
        self.TopBoxSizer.Add(self.SubBoxSizer,proportion =-1, border = 2,flag = wx.ALL | wx.EXPAND)    
        self.TopBoxSizer.Add(self.FigureCanvas,proportion =-10, border = 2,flag = wx.ALL | wx.EXPAND)    
    
        self.SetSizer(self.TopBoxSizer)    
    
    #显示坐标值        
    def MPLOnMouseMove(self,event):    
    
        ex=event.xdata#这个数据类型是numpy.float64    
        ey=event.ydata#这个数据类型是numpy.float64    
        if ex  and ey :    
            #可以将numpy.float64类型转化为float类型,否则格式字符串可能会出错    
            self.StaticText.SetLabel('%10.5f,%10.5f' % (float(ex),float(ey)))    
            #也可以这样    
            #self.StaticText.SetLabel('%s,%s' % (ex,ey))           
  
###############################################################################  
#  MPL_Frame添加了MPL_Panel的1个实例  
###############################################################################  
class MPL_Frame(wx.Frame):  
    """MPL_Frame可以继承,并可修改,或者直接使用"""  
    def __init__(self,title="MPL_Frame Example In wxPython",size=(800,500)):  
        wx.Frame.__init__(self,parent=None,title = title,size=size)  
  
        self.MPL = MPL_Panel(self)  
        self.Figure = self.MPL.Figure  
        self.axes = self.MPL.axes  
        self.FigureCanvas = self.MPL.FigureCanvas  
          
        self.RightPanel = wx.Panel(self,-1)  
        #测试按钮1  
        self.Button1 = wx.Button(self.RightPanel,-1,"TestButton",size=(100,40),pos=(10,10))  
        self.Button1.Bind(wx.EVT_BUTTON,self.Button1Event)  
        #创建FlexGridSizer  
        self.FlexGridSizer=wx.FlexGridSizer( rows=5, cols=1, vgap=5,hgap=5)  
        self.FlexGridSizer.SetFlexibleDirection(wx.BOTH)  
        #加入Sizer中  
        self.FlexGridSizer.Add(self.Button1,proportion =0, border = 5,flag = wx.ALL | wx.EXPAND)  
  
  
        self.RightPanel.SetSizer(self.FlexGridSizer)  
          
        self.BoxSizer=wx.BoxSizer(wx.HORIZONTAL)  
        self.BoxSizer.Add(self.MPL,proportion =-10, border = 2,flag = wx.ALL | wx.EXPAND)  
        self.BoxSizer.Add(self.RightPanel,proportion =0, border = 2,flag = wx.ALL | wx.EXPAND)  
      
        self.SetSizer(self.BoxSizer)      
        #MPL_Frame界面居中显示  
        self.Centre(wx.BOTH)  
  
    #按钮事件,用于测试绘图  
    def Button1Event(self,event):  
        x=np.arange(-10,10,0.25)  
        y=np.cos(x)  
        self.axes.plot(x,y,'--b*')  
        self.axes.grid(True)  
        self.FigureCanvas.draw()#一定要实时更新  
          
         
  
########################################################################  
  
#主程序测试  
if __name__ == '__main__':  
    app = wx.PySimpleApp()  
    #frame = MPL2_Frame()  
    frame =MPL_Frame()  
    frame.Center()  
    frame.Show()  
    app.MainLoop()
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式