Error:
/usr/bin/python3.5 /root/PycharmProjects/Capstone2/main.py Traceback(最近一次调用最后一次):文件“/root/PycharmProjects/Capstone2/main.py”,第62行,在canvas.show()中文件“/usr/lib/python3/dist-packages/matplotlib/backends/backend_tkagg.py”,第353行,在绘图中self._master.update_idletasks()AttributeError:'NoneType'对象没有属性'update_idletasks'进程已完成退出代码1
Relevant Code:
# GUI imports
from tkinter import *
# Graph imports
import matplotlib.pyplot as plt
import matplotlib
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg, NavigationToolbar2TkAgg
from matplotlib.figure import Figure
import matplotlib.animation as animation
from matplotlib import style
# Time imports
import time
def animate(i):
a.clear()
a.plot(data)
data = []
# GUI Set-Up
ROOT = Tk()
ROOT.attributes("-fullscreen", True)
matplotlib.use("TkAgg")
style.use('ggplot')
f = Frame(ROOT)
fig = Figure(figsize=(12, 7), dpi=100)
a = fig.add_subplot(221)
a.set_title("Data")
canvas = FigureCanvasTkAgg(fig)
canvas.get_tk_widget().pack(side=BOTTOM, fill=BOTH, expand=True)
canvas._tkcanvas.pack(side=TOP, fill=BOTH, expand=True)
canvas.show()
Frame.pack(f)
LOOP_ACTIVE = True
ROOT.config(cursor="none")
ani = animation.FuncAnimation(fig, animate, interval=1000)
plt.show()
for x in range(0, 10):
data.append(x)
ROOT.update()
time.sleep(1)
My Understanding:
应该每隔一秒添加一个数据点 . 每一秒情节应该更新以反映这一点 .
My Thoughts:
-
从一些谷歌搜索暗示AttributeError弹出,因为我试图调用canvas.show和画布是什么,但我认为我的行"canvas = FigureCanvasTkAgg(fig)"是正确的,像"canvas.get_tk_widget().pack(side=BOTTOM, fill=BOTH, expand=True)"之类的早期行不会导致错误
-
如果我省略"canvas.show()",则错误会在以后发生"Exception in Tkinter callback "
-
如果我修改我的代码所以canvas = FigureCanvasTkAgg(fig,master = ROOT)并且匹配一些示例我've found, no errors occur but the animation never does anything. I couldn't找到关于FigureCanvasTkAgg的任何文档,只有示例所以我通过修改这一行做了'm not too sure what I'm
这里可以看到完整的代码(警告:它非常粗略):https://github.com/AdamVen/Capstone/blob/fasterGraph/main.py
我所依据的代码在这里:https://pythonprogramming.net/how-to-embed-matplotlib-graph-tkinter-gui/
我不确定我哪里出错了 . 任何意见,将不胜感激
1 回答
代码的某些部分对我来说不清楚:使用
canvas.show()
(甚至不应该存在)和使用plt.show()
(根本没有创建任何pyplot数字)鉴于在大多数示例中使用
canvas = FigureCanvasTkAgg(fig, master=ROOT)
,我不知道为什么不使用它 .文件末尾的循环似乎没有用 . 相反,您有动画循环来更改您的数据 .
最后,你忘了实际启动程序,即
ROOT.mainloop()
.