2009-07-13 javaeye http://angeloce.iteye.com/admin/blogs/425180
===========================
matplotlib(mpl)本身支持wxpython作為backends。但是直接使用import pylab時調用的wx窗體不能自定義和改制。跟蹤下pylab模塊的show方法,最終找到窗體類為backend_wx(agg)下的FigureFrameWx(FigureFrameWxAgg).我想把這個類單獨拽出來,但關聯太多,實在力不從心,后來發現類FigureCanvasWx(FigureCanvasWxAgg),繼承了wx.Panel類,圖表顯示應該跟此有關。(搞不太懂后綴agg的含義……)
FigureCanvasWx 需要三個參數:parent, id ,figure. 前兩個與wx.Panel相同,后一個是Figure實例(參照matploglab.figure模塊),鼓搗一陣,寫出一個簡單可顯示窗體。
import wx
from matplotlib.backends import backend_wxagg
from matplotlib.figure import Figure
class TestFrame(wx.Frame):
def __init__(self):
wx.Frame.__init__(self, None)
self.panel = backend_wxagg.FigureCanvasWxAgg(self, -1, Figure())
axes = self.panel.figure.gca()
axes.cla()
axes.plot([1,2,3],[1,2,3])
self.panel.draw()
app = wx.App()
f= TestFrame()
f.Show(True)
app.MainLoop()
這個代碼只實現了一張極簡單的x=y直線圖,如果需要添加相應事件和顯示,請參照backend_wx內的代碼。
當然已經有人替我們做好一些, wxmpl http://agni.phys.iit.edu/~kmcivor/wxmpl/
參看源碼,其實mpl嵌入wxpython不是難事。
