2011-10-26 48 views
2

我创建使用matplotlib,因为这3D绘图:matplotlib和PyQt的绘制表面

fig = pylab.figure() 
ax = Axes3D(fig) 
surf = ax.plot_surface(X, Y, Z, cmap=cm.gray_r, linewidth=0, antialiased=True) 
fig.canvas.set_window_title("Distance") 
pylab.show() 

这太棒了:我看到灰色-Cale的表面,我可以与它进行交互(转面,将积,...)

现在我需要把这个图表放在PyQt表格中。我创建从QMainWindow的继承类这样做:

class ViewerForm(QMainWindow): 
    def __init__(self, p_parent=None, p_data=None): 
     QMainWindow.__init__(self, parent=p_parent) 

     self.main_frame = QWidget() 
     self.figure = pyplot.figure() 
     self.axis = Axes3D(self.figure) 
     self.canvas = FigureCanvas(self.figure) 
     self.canvas.setParent(self.main_frame) 
     self.mpl_toolbar = NavigationToolbar(self.canvas, self.main_frame) 

     self.X, self.Y = np.meshgrid(p_data[ "axis_x" ], p_data[ "axis_y" ]) 
     self.Z = p_data[ "values_z" ] 

     self.surface = self.axis.plot_surface(self.X, self.Y, self.Z, cmap=cm.gray, linewidth=0, antialiased=True) 

     vbox = QVBoxLayout() 
     vbox.addWidget(self.canvas) 
     vbox.addWidget(self.mpl_toolbar) 
     self.main_frame.setLayout(vbox) 

     self.setCentralWidget(self.main_frame) 

当我表明这种形式,我可以看到在灰度表面作为第一条曲线,但我不能与此交互:我不能移动用鼠标点击表面。任何人都可以说我做错了什么或者我误解了什么?

回答

1

我收到了这一点,它混淆了我很多。振亚对鼠标点击是正确的。

默认情况下,当轴被清除/重新绘制时,通过鼠标控制绘图被关闭。我不知道为什么会这样,但你需要再次启动鼠标交互:

self.surface = self.axis.plot_surface(self.X, self.Y, self.Z, cmap=cm.gray, linewidth=0, antialiased=True) 
self.axis.mouse_init()