如何在 PyQt4 小部件中嵌入的 Axes3D (matplotlib) 中启用旋转?
Posted
技术标签:
【中文标题】如何在 PyQt4 小部件中嵌入的 Axes3D (matplotlib) 中启用旋转?【英文标题】:How to enable rotation in an Axes3D (matplotlib) embedded in a PyQt4 widget? 【发布时间】:2011-12-12 13:41:49 【问题描述】:我正在使用以下问题中显示的方法在 PyQt4 小部件中嵌入 Axes3D:
Qt4 + mplot3d of matplotlib
启动应用程序时,我无法再通过鼠标移动来旋转轴。我需要做什么才能再次启用轮播?
【问题讨论】:
【参考方案1】:任何时候你调用类似Axes3D.clear()
的东西,然后再次启用鼠标旋转你必须调用Axes3D.mouse_init()
。
似乎没有记录,但它对我有用! Source
【讨论】:
【参考方案2】:我遇到了同样的问题,经过深度调试后解决了。问题是画布实例的不一致。示例代码首先构造一个图形,该图形自动为图形提供画布实例。然后将一个轴添加到图形中,然后将图形的画布替换为另一个可以用作QWidget
的画布。
但是,Axes3D
构造函数将回调函数添加到其图形的画布以实现旋转功能。因此,如果在此之后更换画布,与旋转功能的连接就会丢失。
在将坐标轴添加到图中之前,只需调用 FigureCanvas.__init__()
就足够了,但我还没有尝试过。
我的工作解决方案有点不同:首先我调用matplotlib.use("Qt4Agg")
来设置正确的后端。接下来,我使用fig = matplotlib.pyplot.figure()
构建图形,确保它们已经包含正确的画布,然后将Axes3D
添加到它们。我只是作为数据元素fig.canvas
访问画布并将其用作QWidget
。在构造任何图形之前调用QtGui.QApplication()
也很重要。
【讨论】:
我想我实际上正在这样做,但它不起作用。也许您可以在pastebin.com/Y7Fcsnpp 上查看我的代码(46 行),并且可能对出了什么问题有所了解。【参考方案3】:我遇到了类似的问题,但我的轴不会出现。我调用了FigureCanvas.__init__()
,然后按照Björn 的建议通过调用self.ax = self.fig.add_subplot(111, projection='3d')
将轴添加到图形中
【讨论】:
【参考方案4】:在这里,在 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()
【讨论】:
欢迎来到 Stack Overflow!一般来说,如果答案包含对代码的用途的解释,以及为什么在不介绍其他人的情况下解决了问题,那么答案会更有帮助。以上是关于如何在 PyQt4 小部件中嵌入的 Axes3D (matplotlib) 中启用旋转?的主要内容,如果未能解决你的问题,请参考以下文章
在 PyQt4 的嵌入式 matplotlib 图中使用 ginput
PyQt4:使用 QPushButton 小部件从 QList 小部件中删除项目