我正在使用以下问题中显示的方法将Axes3D嵌入到PyQt4小部件中:
启动应用程序时,我无法再通过鼠标移动来旋转轴。我需要做什么才能再次启用旋转?
答案 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()