我正在用wxPython编写一个应用程序。按钮"Plot“显示了具有3D表面的wxFrame,但我不能旋转表面。是否可以旋转放置在wxFrame中的3D绘图?我该怎么做呢?
示例:
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()发布于 2010-07-29 22:13:49
你最好去wxPython google群上问问,因为我在那里见过使用matplotlib的人。无论如何,查看matplotlib网站,似乎有一个wxMpl模块可能会有所帮助:http://agni.phys.iit.edu/~kmcivor/wxmpl/
我的猜测是,如果matplotlib可以在wx之外旋转绘图,那么您只需要将一些事件从wx传递到matplotlib,就可以使其在wx内工作。
https://stackoverflow.com/questions/3362292
复制相似问题