【发布时间】:2011-12-12 13:41:49
【问题描述】:
我正在使用以下问题中显示的方法在 PyQt4 小部件中嵌入 Axes3D:
启动应用程序时,我无法再通过鼠标移动来旋转轴。我需要做什么才能再次启用轮播?
【问题讨论】:
标签: 3d matplotlib pyqt4
我正在使用以下问题中显示的方法在 PyQt4 小部件中嵌入 Axes3D:
启动应用程序时,我无法再通过鼠标移动来旋转轴。我需要做什么才能再次启用轮播?
【问题讨论】:
标签: 3d matplotlib pyqt4
任何时候你调用类似Axes3D.clear()的东西,然后再次启用鼠标旋转你必须调用Axes3D.mouse_init()。
似乎没有记录,但它对我有用! Source
【讨论】:
我遇到了同样的问题,经过深度调试后解决了。问题是画布实例的不一致。示例代码首先构造一个图形,该图形自动为图形提供画布实例。然后将一个轴添加到图形中,然后将图形的画布替换为另一个可以用作QWidget的画布。
但是,Axes3D 构造函数将回调函数添加到其图形的画布以实现旋转功能。因此,如果在此之后更换画布,与旋转功能的连接就会丢失。
在将坐标轴添加到图中之前,只需调用 FigureCanvas.__init__() 就足够了,但我还没有尝试过。
我的工作解决方案有点不同:首先我调用matplotlib.use("Qt4Agg") 来设置正确的后端。接下来,我使用fig = matplotlib.pyplot.figure() 构建图形,确保它们已经包含正确的画布,然后将Axes3D 添加到它们。我只是作为数据元素fig.canvas 访问画布并将其用作QWidget。在构造任何图形之前调用QtGui.QApplication() 也很重要。
【讨论】:
我遇到了类似的问题,但我的轴不会出现。我调用了FigureCanvas.__init__(),然后按照Björn 的建议通过调用self.ax = self.fig.add_subplot(111, projection='3d') 将轴添加到图形中
【讨论】:
在这里,在 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()
【讨论】: