2010-07-29 46 views
0

我在wxPython中编写了一个应用程序。 “Plot”按钮显示带有3D表面的wxFrame,但我无法旋转表面。是否可以旋转放置在wxFrame中的3D图形?我能怎么做?wxPython框架中的mplot3d

例子:

import matplotlib 
matplotlib.use('WXAgg') 
from matplotlib.backends.backend_wxagg import FigureCanvasWxAgg as FigureCanvas 
from matplotlib.backends.backend_wx import NavigationToolbar2Wx 

import wx 

from mpl_toolkits.mplot3d import axes3d 
import matplotlib.pyplot as plt 

class CanvasFrame(wx.Frame): 

    def __init__(self): 
     wx.Frame.__init__(self, None, -1, 'CanvasFrame', size=(550,350)) 

     self.SetBackgroundColour(wx.NamedColor("WHITE")) 

     self.figure = plt.figure() 
     self.axes = axes3d.Axes3D(self.figure) 
     X, Y, Z = axes3d.get_test_data(0.05) 
     self.axes.plot_surface(X, Y, Z, rstride=8, cstride=8, alpha=0.3) 
     cset = self.axes.contour(X, Y, Z, zdir='z', offset=-100) 
     cset = self.axes.contour(X, Y, Z, zdir='x', offset=-40) 
     cset = self.axes.contour(X, Y, Z, zdir='y', offset=40) 

     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() 

     self.add_toolbar() 

    def add_toolbar(self): 
     self.toolbar = NavigationToolbar2Wx(self.canvas) 
     self.toolbar.Realize() 
     if wx.Platform == '__WXMAC__': 
      self.SetToolBar(self.toolbar) 
     else: 
      tw, th = self.toolbar.GetSizeTuple() 
      fw, fh = self.canvas.GetSizeTuple() 
      self.toolbar.SetSize(wx.Size(fw, th)) 
      self.sizer.Add(self.toolbar, 0, wx.LEFT | wx.EXPAND) 
     self.toolbar.update() 

    def OnPaint(self, event): 
     self.canvas.draw() 

class App(wx.App): 

    def OnInit(self): 
     frame = CanvasFrame() 
     frame.Show(True) 

     return True 

app = App(0) 
app.MainLoop() 

回答

2

你可能会更好,询问关于wxPython的谷歌组,因为我看到人们在那里使用matplotlib。不管怎样,看着matplotlib网站,它似乎有一个wxMpl模块,可以帮助:http://agni.phys.iit.edu/~kmcivor/wxmpl/

我的猜测是,如果matplotlib可以WX外旋转打印,那么你只需要从WX通过一些事件matplotlib使其在wx内工作。