Python _tkinter.TclError:这不是&x27;Tk在matplotlib条形图中的应用

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

我有一个程序,可以分析某些视频,并根据视频内容每秒分配一个“分数”。我举了一个程序大量输出的一些原始数据的例子(x表示秒,y表示分数)

等等。我的目标是创建一个与视频一起播放的动画图形。例如,播放1秒视频时,将绘制点(1,27)。当2秒过去时,绘制点(2,48)。我现在不关心视频和动画图形的合并;现在我只关心让图形每秒绘制一个条形图

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