Python _tkinter.TclError:这不是&x27;Tk在matplotlib条形图中的应用
我有一个程序,可以分析某些视频,并根据视频内容每秒分配一个“分数”。我举了一个程序大量输出的一些原始数据的例子(x表示秒,y表示分数) 等等。我的目标是创建一个与视频一起播放的动画图形。例如,播放1秒视频时,将绘制点(1,27)。当2秒过去时,绘制点(2,48)。我现在不关心视频和动画图形的合并;现在我只关心让图形每秒绘制一个条形图Python _tkinter.TclError:这不是&x27;Tk在matplotlib条形图中的应用,python,numpy,matplotlib,Python,Numpy,Matplotlib,我有一个程序,可以分析某些视频,并根据视频内容每秒分配一个“分数”。我举了一个程序大量输出的一些原始数据的例子(x表示秒,y表示分数) 等等。我的目标是创建一个与视频一起播放的动画图形。例如,播放1秒视频时,将绘制点(1,27)。当2秒过去时,绘制点(2,48)。我现在不关心视频和动画图形的合并;现在我只关心让图形每秒绘制一个条形图 from matplotlib import pyplot as plt import numpy as np import numpy from matplotl
from matplotlib import pyplot as plt
import numpy as np
import numpy
from matplotlib import animation
fig = plt.figure()
ax = plt.axes(xlim=(0, 10), ylim=(0, 100)) #a 0 to 10 x axis and a 0 to 100 y
line, = ax.plot([], [], lw=2)
def init():
line.set_data([], [])
return line,
def animate(i):
with open('E:\PYTHON\data.txt') as f:
lines = f.readlines()
x = [float(line.split()[0]) for line in lines]
y = [float(line.split()[1]) for line in lines]
ax.bar(x,y, width=0.7)
plt.show()
plt.draw()
ani = animation.FuncAnimation(fig, animate, interval=1000)
plt.show()
然而,这段代码最终将我的所有数据发送到一个图像中,而不是一个动画,然后给我这个错误。我想“在一幅图像中发送所有数据”部分是因为我没有在x和y值中使用“I”,但老实说,我不知道如何在动画代码中实现“I”
Traceback (most recent call last):
File "E:\PYTHON\lib\site-packages\matplotlib\cbook\__init__.py", line 388, in process
proxy(*args, **kwargs)
File "E:\PYTHON\lib\site-packages\matplotlib\cbook\__init__.py", line 228, in __call__
return mtd(*args, **kwargs)
File "E:\PYTHON\lib\site-packages\matplotlib\animation.py", line 1030, in _start
self.event_source.add_callback(self._step)
AttributeError: 'NoneType' object has no attribute 'add_callback'
Exception in Tkinter callback
Traceback (most recent call last):
File "E:\PYTHON\lib\site-packages\matplotlib\backends\tkagg.py", line 26, in blit
dataptr, colormode, bboxptr)
_tkinter.TclError: this isn't a Tk application
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "E:\PYTHON\lib\tkinter\__init__.py", line 1702, in __call__
return self.func(*args)
File "E:\PYTHON\lib\site-packages\matplotlib\backends\_backend_tk.py", line 227, in resize
self.draw()
File "E:\PYTHON\lib\site-packages\matplotlib\backends\backend_tkagg.py", line 13, in draw
tkagg.blit(self._tkphoto, self.renderer._renderer, colormode=2)
File "E:\PYTHON\lib\site-packages\matplotlib\backends\tkagg.py", line 34, in blit
dataptr, colormode, bboxptr)
_tkinter.TclError: this isn't a Tk application
有人能帮我制作这个条形图的动画吗?我的代码也发生了类似的事情。我在主线程中运行matplotlib GUI,它使用TkAgg作为后端。在另一个线程中,我有一个函数,它每隔一段时间就会更新GUI可视化。我在关闭GUI窗口后得到了您描述的错误,但另一个线程仍在运行,并调用更新不再存在的图形。我已经找到了一些其他的帮助,也许对你有用。您可以做的第一件事是确保matplotlib正在使用TkAgg后端
导入matplotlib
打印(matplotlib.get\u backend())
如果没有,可以按照此处()的说明操作,说明如何使matplotlib使用TkAgg
我还没有解决我自己的问题,但希望这能将您推向正确的方向。当然,您最终希望为每个动画帧使用不同的数据。但这与你所犯的错误无关。尝试删除两行
plt.show()plt.draw()
。如果这消除了错误,您可以编辑您的问题,并告诉我们您读取的文件包含哪些数据,以及您希望如何在动画中使用这些数据。
Traceback (most recent call last):
File "E:\PYTHON\lib\site-packages\matplotlib\cbook\__init__.py", line 388, in process
proxy(*args, **kwargs)
File "E:\PYTHON\lib\site-packages\matplotlib\cbook\__init__.py", line 228, in __call__
return mtd(*args, **kwargs)
File "E:\PYTHON\lib\site-packages\matplotlib\animation.py", line 1030, in _start
self.event_source.add_callback(self._step)
AttributeError: 'NoneType' object has no attribute 'add_callback'
Exception in Tkinter callback
Traceback (most recent call last):
File "E:\PYTHON\lib\site-packages\matplotlib\backends\tkagg.py", line 26, in blit
dataptr, colormode, bboxptr)
_tkinter.TclError: this isn't a Tk application
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "E:\PYTHON\lib\tkinter\__init__.py", line 1702, in __call__
return self.func(*args)
File "E:\PYTHON\lib\site-packages\matplotlib\backends\_backend_tk.py", line 227, in resize
self.draw()
File "E:\PYTHON\lib\site-packages\matplotlib\backends\backend_tkagg.py", line 13, in draw
tkagg.blit(self._tkphoto, self.renderer._renderer, colormode=2)
File "E:\PYTHON\lib\site-packages\matplotlib\backends\tkagg.py", line 34, in blit
dataptr, colormode, bboxptr)
_tkinter.TclError: this isn't a Tk application