【问题标题】:How to enable rotation in an Axes3D (matplotlib) embedded in a PyQt4 widget?如何在 PyQt4 小部件中嵌入的 Axes3D (matplotlib) 中启用旋转?
【发布时间】:2011-12-12 13:41:49
【问题描述】:

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

Qt4 + mplot3d of matplotlib

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

【问题讨论】:

    标签: 3d matplotlib pyqt4


    【解决方案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!一般来说,如果答案包含对代码的用途的解释,以及为什么在不介绍其他人的情况下解决了问题,那么答案会更有帮助。
        猜你喜欢
        • 2013-09-03
        • 2017-11-23
        • 2016-12-25
        • 2018-05-10
        • 1970-01-01
        • 1970-01-01
        • 2013-09-14
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多