wxpthon 控制項編程

來源:互聯網
上載者:User

學習網址: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() 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.