python - 如何在 python 的 tkinter 帧中导入 matplotlib 3D 动画?
问题描述
我正在尝试在 Tkinter 窗口中导入 matplotlib 3D 动画,但我遇到了一个错误。我的 Tkinter 窗口有很多帧,我尝试在其中一个帧上绘制动画。最后,我在类 init 函数中创建所有元素。所以这是我的代码的简化版本:
from tkinter import *
import matplotlib
matplotlib.use("TkAgg")
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
from matplotlib.figure import Figure
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.animation as anim
import random
class UI:
def __init__(self):
self.back = Frame(master=self.window, width=1200, height=800, bg='white')
self.rightBack = Frame(master=self.back, width=300, height=800)
self.rightBack.pack(side='right',padx=2,pady=2)
self.fig = Figure()
self.axes = Axes3D(self.fig)
self.ani = anim.FuncAnimation(self.fig, self.updateDisplay, interval=100, blit=False) # Creating animation
self.canvas = FigureCanvasTkAgg(self.fig, master=self.displayBack)
self.canvas.get_tk_widget().pack(side=TOP,fill=BOTH,expand=True)
# Starting application
self.window.mainloop()
def updateDisplay(self,num):
self.axes.clear()
self.axes.plot([0,1,random.random()],[0,1,random.random()],[0,1,random.random()],'o',color='k',markersize='5')
但是当我在 python 中运行以下命令时
self.ani = anim.FuncAnimation(self.fig, self.updateDisplay, interval=100, blit=False)
我收到这个错误
File "matplotlib/animation.py", line 1703, in __init__
TimedAnimation.__init__(self, fig, **kwargs)
File "matplotlib/animation.py", line 1465, in __init__
event_source = fig.canvas.new_timer()
AttributeError: 'NoneType' object has no attribute 'new_timer'
所以我想我理解了这个错误,因为动画需要一个计时器,但我不知道如何解决它。有什么帮助吗?提前致谢
解决方案
动画需要驻留在具有画布的图形中。在您的代码中,您仅在 动画之后定义画布。我想如果你颠倒动画和画布的顺序,它会按预期工作。
# First define the canvas
self.canvas = FigureCanvasTkAgg(self.fig, ...)
# only then define the animation
self.ani = anim.FuncAnimation(self.fig, ...)
推荐阅读
- stm32 - 通过 ESP8266 WiFi 使 STM32 上的 FatFS 文件系统可用于 PC
- xml - 在 XML 中添加带空格的行
- django - 是否可以使用 django orm 生成结果集的哈希?
- javascript - 以特定顺序将图像绘制到画布
- kotlin - 如何更改解析?
- phpstorm - 在 PhpStorm 中设置默认包含路径
- node.js - Angular 6 和 PWA
- python-3.x - 如何根据元素的频率对熊猫数据框进行颜色编码?
- google-apps-script - 谷歌数据工作室表显示日期列为空
- angular - Nativescript Angular CALDAV 请求报告?