gpt4 book ai didi

python - 无法调用 canvas.show()

转载 作者:太空宇宙 更新时间:2023-11-04 02:26:52 26 4
gpt4 key购买 nike

错误:

/usr/bin/python3.5 /root/PycharmProjects/Capstone2/main.py Traceback (most recent call last): File "/root/PycharmProjects/Capstone2/main.py", line 62, in canvas.show() File "/usr/lib/python3/dist-packages/matplotlib/backends/backend_tkagg.py", line 353, in draw self._master.update_idletasks() AttributeError: 'NoneType' object has no attribute 'update_idletasks' Process finished with exit code 1

相关代码:

# 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)

我的理解:

每一秒都应该添加一个数据点。情节应该每秒更新以反射(reflect)这一点。

我的想法:

  1. 从一些谷歌搜索中提示 AttributeError 弹出是因为我正在尝试调用 canvas.show 而 canvas 什么都不是,但我认为我的行“canvas = FigureCanvasTkAgg(fig)”是正确的,而较早的行如“canvas.get_tk_widget() .pack(side=BOTTOM, fill=BOTH, expand=True)"不会导致错误
  2. 如果我省略“canvas.show()”,则稍后会出现错误“Tkinter 回调异常”
  3. 如果我将代码修改为 canvas = FigureCanvasTkAgg(fig, master=ROOT) 并匹配我发现的一些示例,则不会发生任何错误,但动画不会执行任何操作。我找不到关于 FigureCanvasTkAgg 的任何文档,只有示例,所以我不太确定通过修改此行我在做什么

可以在这里看到完整的代码(警告:它非常恶心):https://github.com/AdamVen/Capstone/blob/fasterGraph/main.py

我基于我的代码在这里:https://pythonprogramming.net/how-to-embed-matplotlib-graph-tkinter-gui/

我不确定我哪里出错了。任何建议将不胜感激

最佳答案

代码的某些部分我不清楚: canvas.show() 的使用(甚至不应该存在)和 plt.show() 的使用(这没有意义,因为您根本没有创建任何 pyplot 图)

鉴于canvas = FigureCanvasTkAgg(fig, master=ROOT)在大多数示例中使用,我不知道为什么不使用它。

文件末尾的循环似乎没有用。相反,您可以使用动画循环来更改数据。

最后,你忘了实际启动程序,即 ROOT.mainloop() .

from Tkinter import  *
import matplotlib
matplotlib.use("TkAgg")
import matplotlib.pyplot as plt
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
from matplotlib.figure import Figure
import matplotlib.animation as animation

# Data simulation imports
import time

def animate(i):
a.clear()
data.append(i)
a.plot(data)

data = []

# GUI Set-Up
ROOT = Tk()
f = Frame(ROOT)

plt.style.use('ggplot')
fig = Figure(figsize=(12, 7), dpi=100)

a = fig.add_subplot(221)
a.set_title("Data")

canvas = FigureCanvasTkAgg(fig, master=ROOT)
canvas.get_tk_widget().pack(side=BOTTOM, fill=BOTH, expand=True)
canvas._tkcanvas.pack(side=TOP, fill=BOTH, expand=True)

Frame.pack(f)

ani = animation.FuncAnimation(fig, animate, interval=1000)

ROOT.mainloop()

关于python - 无法调用 canvas.show(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50165115/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com