如何在PyQt4小部件中嵌入的Axes3D(matplotlib)中启用旋转?

时间:2011-12-12 13:41:50

标签: 3d matplotlib pyqt4

我正在使用以下问题中显示的方法将Axes3D嵌入到PyQt4小部件中:

Qt4 + mplot3d of matplotlib

启动应用程序时,我无法再通过鼠标移动来旋转轴。我需要做什么才能再次启用旋转?

4 个答案:

答案 0 :(得分:1)

每次调用类似Axes3D.clear()的内容,然后再次启用鼠标旋转时,您必须调用Axes3D.mouse_init()

似乎没有证件,但它对我有用! Source

答案 1 :(得分:0)

我有同样的问题并在深度调试后解决了。问题是canvas实例的不一致。示例代码首先构造一个图形,该图形自动为图形提供画布实例。然后将一个轴添加到图形中,然后将图形的画布替换为另一个可用作QWidget的画布。

但是,Axes3D构造函数将回调函数添加到其图形画布以实现旋转功能。因此,如果在此之后替换画布,则与旋转函数的连接将丢失。

在将轴添加到图中之前,简单地调用FigureCanvas.__init__()就足够了,但我还没试过。

我的工作解决方案略有不同:首先我调用matplotlib.use("Qt4Agg")来设置正确的后端。接下来,我使用fig = matplotlib.pyplot.figure()构建数字,以确保它们已包含正确的画布,然后将Axes3D添加到它们。我只是将画布作为数据元素fig.canvas访问,并将其用作QWidget。在构造任何数字之前调用QtGui.QApplication()也很重要。

答案 2 :(得分:0)

我有类似的问题,但我的轴不会出现。我打电话给FigureCanvas.__init__()然后根据Björn

的建议拨打self.ax = self.fig.add_subplot(111, projection='3d'),将轴添加到图中

答案 3 :(得分:0)

这里,在Python 3中,在设置全局变量self.ax之后,我通过调用self.ax.mouse_init()来切换鼠标旋转。也许它可以帮助你。

self.fig = Figure(figsize = (5,5), dpi = 100)
self.ax = self.fig.add_subplot(1,1,1, projection='3d')
self.canvas = FigureCanvasTkAgg(self.fig, root)
self.ax.mouse_init()
self.canvas.draw()
self.canvas.get_tk_widget().grid()