2012-05-24 37 views
22

如何嵌入wxPython的面板內matplotlib圖形對象內matplotlib的數字?嵌入一個wxPython的面板

我搜索了一下,看到了複雜的例子,涉及交互式圖形和其他額外的東西。任何人都可以幫助一個最小的例子嗎?

回答

31

這是用於與matplotlib畫布面板的最小例如:

from numpy import arange, sin, pi 
import matplotlib 
matplotlib.use('WXAgg') 

from matplotlib.backends.backend_wxagg import FigureCanvasWxAgg as FigureCanvas 
from matplotlib.backends.backend_wx import NavigationToolbar2Wx 
from matplotlib.figure import Figure 

import wx 

class CanvasPanel(wx.Panel): 
    def __init__(self, parent): 
     wx.Panel.__init__(self, parent) 
     self.figure = Figure() 
     self.axes = self.figure.add_subplot(111) 
     self.canvas = FigureCanvas(self, -1, self.figure) 
     self.sizer = wx.BoxSizer(wx.VERTICAL) 
     self.sizer.Add(self.canvas, 1, wx.LEFT | wx.TOP | wx.GROW) 
     self.SetSizer(self.sizer) 
     self.Fit() 

    def draw(self): 
     t = arange(0.0, 3.0, 0.01) 
     s = sin(2 * pi * t) 
     self.axes.plot(t, s) 


if __name__ == "__main__": 
    app = wx.PySimpleApp() 
    fr = wx.Frame(None, title='test') 
    panel = CanvasPanel(fr) 
    panel.draw() 
    fr.Show() 
    app.MainLoop() 

enter image description here

+3

嘿,你能寫一個n選項設置畫布的大小呢? – aitchnyu

1

定義幀大小:

if __name__ == "__main__": 
    app = wx.App() 
    fr = wx.Frame(None, title='test', size=wx.Size(806, 450)) 
    panel = CanvasPanel(fr) 
    panel.draw() 
    fr.Show() 
    app.MainLoop() 

或限定所述面板尺寸:

class CanvasPanel(wx.Panel): 
    def __init__(self, parent): 
     wx.Panel.__init__(self, parent,size=wx.Size(806, 450)) 
...