wxpthon 控件编程

学习网址:http://www.jb51.net/article/50852.htm


# -*- coding: utf-8 -*-
import wx  
  
import numpy as np  
  
import matplotlib  
  
# matplotlib采用WXAgg为后台,将matplotlib嵌入wxPython中  
matplotlib.use("WXAgg")  
  
from matplotlib.backends.backend_wxagg import FigureCanvasWxAgg as FigureCanvas  
from matplotlib.backends.backend_wxagg import NavigationToolbar2WxAgg as NavigationToolbar  
from matplotlib.ticker import MultipleLocator, FuncFormatter    
import pylab  
from matplotlib import pyplot  
  
######################################################################################  
class XDSL_Figure_base(wx.Panel):  
    def __init__(self, parent, figmode = "scalar", drawdata = []): 
        #figMode = scalar  or vector
        self.figmode = figmode
        wx.Panel.__init__(self,parent=parent, id=-1)  
  
        self.Figure = matplotlib.figure.Figure(figsize=(4,3))
        self.axes_list = []
        if figmode == "scalar":
            axes = self.Figure.add_subplot(111)
            self.Figure.subplots_adjust(left=0.2, bottom=0.2, right=0.8, top=0.8,hspace=0.2, wspace=0.3) 
            self.axes_list.append(axes)
        else:
            if figmode == "vector":
                axes = self.Figure.add_subplot(211)
                self.Figure.subplots_adjust(left=0.2, bottom=0.2, right=0.8, top=0.8,hspace=0.2, wspace=0.3)
                self.axes_list.append(axes)
                axes = self.Figure.add_subplot(212)
                self.Figure.subplots_adjust(left=0.2, bottom=0.2, right=0.8, top=0.8,hspace=0.2, wspace=0.3)
                self.axes_list.append(axes)
            else:
                print "plot mode error"
                
        #self.Figure.patch.set_color("")
        self.FigureCanvas = FigureCanvas(self,-1,self.Figure)         
        self.NavigationToolbar = NavigationToolbar(self.FigureCanvas)  
   
        self.SubBoxSizerNavigate = wx.BoxSizer(wx.HORIZONTAL)  
        self.SubBoxSizerNavigate.Add(self.NavigationToolbar,proportion =0, border = 2,flag = wx.ALL | wx.EXPAND)  
  
        self.TopBoxSizer = wx.BoxSizer(wx.VERTICAL)  
        self.TopBoxSizer.Add(self.SubBoxSizerNavigate,proportion =-1, border = 2,flag = wx.ALL | wx.EXPAND)  
        self.SubBoxSizerFigure = wx.BoxSizer(wx.HORIZONTAL) 
        self.SubBoxSizerFigure.Add(self.FigureCanvas,proportion =2, border = 2,flag = wx.ALL | wx.EXPAND)
        labframeitems  = wx.StaticBox(self, label='items')
        labframeitems_boxSizer = wx.StaticBoxSizer(labframeitems, orient=wx.VERTICAL) 
        legend_chk_box = wx.CheckBox(self, label="legend")
        labframeitems_boxSizer.Add(legend_chk_box)
        self.SubBoxSizerFigure.Add(labframeitems_boxSizer,proportion =1, border = 2,flag = wx.ALL | wx.EXPAND)


        self.TopBoxSizer.Add(self.SubBoxSizerFigure,proportion =-10, border = 2,flag = wx.ALL | wx.EXPAND)  
  
        self.SetSizer(self.TopBoxSizer)  
  
        ###方便调用  
        self.pylab=pylab  
        self.pl=pylab  
        self.pyplot=pyplot  
        self.numpy=np  
        self.np=np  
        self.plt=pyplot  
        if len(drawdata)==0:
            print "no data to print"
            return
            
    def UpdatePlot(self):  
        '''''#修改图形的任何属性后都必须使用self.UpdatePlot()更新GUI界面 '''
        self.FigureCanvas.draw()  
  
  
    def plot(self,*args,**kwargs):  
        '''''#最常用的绘图命令plot '''  
        self.axes.plot(*args,**kwargs)  
        self.UpdatePlot()  
  
  
    def semilogx(self,*args,**kwargs):  
        ''''' #对数坐标绘图命令 '''  
        self.axes.semilogx(*args,**kwargs)  
        self.UpdatePlot()  
  
    def semilogy(self,*args,**kwargs):  
        ''''' #对数坐标绘图命令 '''  
        self.axes.semilogy(*args,**kwargs)  
        self.UpdatePlot()  
  
    def loglog(self,*args,**kwargs):  
        ''''' #对数坐标绘图命令 '''  
        self.axes.loglog(*args,**kwargs)  
        self.UpdatePlot()  
  
  
    def grid(self,flag=True):  
        ''''' ##显示网格  '''  
        if flag:  
            self.axes.grid()  
        else:  
            self.axes.grid(False)  
  
  
    def title_MPL(self,TitleString="wxMatPlotLib Example In wxPython"):  
        ''''' # 给图像添加一个标题   '''  
        self.axes.set_title(TitleString)  
  
  
    def xlabel(self,XabelString="X"):  
        ''''' # Add xlabel to the plotting    '''  
        self.axes.set_xlabel(XabelString)  
  
  
    def ylabel(self,YabelString="Y"):  
        ''''' # Add ylabel to the plotting '''  
        self.axes.set_ylabel(YabelString)  
  
  
    def xticker(self,major_ticker=1.0,minor_ticker=0.1):  
        ''''' # 设置X轴的刻度大小 '''  
        self.axes.xaxis.set_major_locator( MultipleLocator(major_ticker) )  
        self.axes.xaxis.set_minor_locator( MultipleLocator(minor_ticker) )  
  
  
    def yticker(self,major_ticker=1.0,minor_ticker=0.1):  
        ''''' # 设置Y轴的刻度大小 '''  
        self.axes.yaxis.set_major_locator( MultipleLocator(major_ticker) )  
        self.axes.yaxis.set_minor_locator( MultipleLocator(minor_ticker) )  
  
  
    def legend(self,*args,**kwargs):  
        ''''' #图例legend for the plotting  '''  
        self.axes.legend(*args,**kwargs)  
  
  
    def xlim(self,x_min,x_max):  
        ''''' # 设置x轴的显示范围  '''  
        self.axes.set_xlim(x_min,x_max)  
  
  
    def ylim(self,y_min,y_max):  
        ''''' # 设置y轴的显示范围   '''  
        self.axes.set_ylim(y_min,y_max)  
  
  
    def savefig(self,*args,**kwargs):  
        ''''' #保存图形到文件 '''  
        self.Figure.savefig(*args,**kwargs)  
  
  
    def cla(self):  
        ''''' # 再次画图前,必须调用该命令清空原来的图形  '''  
        self.axes.clear()  
        self.Figure.set_canvas(self.FigureCanvas)  
        self.UpdatePlot()  
          
    def ShowHelpString(self,HelpString="Show Help String"):  
        ''''' #可以用它来显示一些帮助信息,如鼠标位置等 '''  
        self.StaticText.SetLabel(HelpString)  
  


###############################################################################  
#  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 = XDSL_Figure_base(self)  
  
        #状态栏  
        self.StatusBar()  
  
        #MPL_Frame界面居中显示  
        self.Centre(wx.BOTH)  
   
    #自动创建状态栏  
    def StatusBar(self):  
        self.statusbar = self.CreateStatusBar()  
        self.statusbar.SetFieldsCount(3)  
        self.statusbar.SetStatusWidths([-2, -2, -1])  
  
  


  
  
########################################################################  
  
#主程序测试  
if __name__ == '__main__':  
    app = wx.App()  
    #frame = MPL2_Frame()  
    frame =MPL_Frame()  
    frame.Center()  
    frame.Show()  
    app.MainLoop() 

你可能感兴趣的:(wxpthon 控件编程)