trv*_*rrp 4 matplotlib python-2.7
我正在尝试编写一个可以在Tkinter GUI中包含pyplot(如matplotlib.pyplot)的程序。基本上我想要的是一个带有Tkinter接口的程序在pyplot上显示一些数据,然后当程序获取一些新数据时,我想更新pyplot以包含新数据。
这是一个最小的示例:
import numpy as np
import Tkinter as tk
import matplotlib
matplotlib.use('TkAgg')
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
import matplotlib.pyplot as plt
root = tk.Tk()
fig = plt.figure(1)
t = np.arange(0.0,3.0,0.01)
s = np.sin(np.pi*t)
plt.plot(t,s)
canvas = FigureCanvasTkAgg(fig, master=root)
plot_widget = canvas.get_tk_widget()
def update():
s = np.cos(np.pi*t)
plt.plot(t,s)
plt.draw()
plot_widget.grid(row=0, column=0)
tk.Button(root,text="Update",command=update).grid(row=1, column=0)
root.mainloop()
Run Code Online (Sandbox Code Playgroud)
我希望发生的是,一个窗口弹出,其中包含一个正弦波和一个按钮。当我按下按钮时,余弦波应出现在绘图上。
当我运行程序时,实际上发生的是一个窗口弹出,其中包含一个正弦波和一个按钮。但是,当我按下按钮时,什么也没有发生。情节似乎没有更新。
我可能会犯一些新手错误,但我找不到在线进行此类操作的任何示例。这里出了什么问题,我怎么得到我想要的?
任何帮助将不胜感激!
我想通了,我需要在图形的canvas属性上调用draw()方法以使其重绘,更正后的代码如下。另外,任何遇到此问题或类似问题的人都可能需要查看matplotlib.animate,如果他们需要动态更新其pyplot
import numpy as np
import Tkinter as tk
import matplotlib
matplotlib.use('TkAgg')
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
import matplotlib.pyplot as plt
root = tk.Tk()
fig = plt.figure(1)
plt.ion()
t = np.arange(0.0,3.0,0.01)
s = np.sin(np.pi*t)
plt.plot(t,s)
canvas = FigureCanvasTkAgg(fig, master=root)
plot_widget = canvas.get_tk_widget()
def update():
s = np.cos(np.pi*t)
plt.plot(t,s)
#d[0].set_ydata(s)
fig.canvas.draw()
plot_widget.grid(row=0, column=0)
tk.Button(root,text="Update",command=update).grid(row=1, column=0)
root.mainloop()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9270 次 |
| 最近记录: |