【发布时间】:2021-05-27 08:45:01
【问题描述】:
我正在为我的程序做一个 tkinter GUI,我必须显示一些实时数据。我制作了一个简单的程序(如下)来演示我在一个简单案例中遇到的问题。实际上,我在 for 循环的每次迭代中都绘制了一些数据,这样我就可以在程序仍在计算时观察数据。请注意,实际程序的计算速度会慢一些,并且迭代次数更多。
现在我想添加 2 个按钮(一个用于暂停程序,一个用于继续)和一个标签(显示变量 k,因此我知道我的程序在哪里),但我无法做到。
我已经浪费了很多时间,所以如果有人有提示或解决方案,我很乐意看到它。
import tkinter as tk
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg, NavigationToolbar2Tk
import matplotlib.pyplot as plt
from matplotlib import style
def func_A(a, x):
import numpy
data_x = numpy.arange(0, x)
data_y = a * numpy.sin(data_x/5)
return data_x, data_y
a = 1
root = tk.Tk()
root.title("Graph")
root.geometry("800x400")
fig = plt.figure(figsize=(5, 5), dpi=100)
canvas = FigureCanvasTkAgg(fig, master=root) # A tk.DrawingArea.
canvas.draw()
canvas.get_tk_widget().pack(side=tk.TOP, fill=tk.BOTH, expand=1)
toolbar = NavigationToolbar2Tk(canvas, root)
toolbar.update()
canvas.get_tk_widget().pack(side=tk.TOP, fill=tk.BOTH, expand=1)
plt.grid("both")
style.use("ggplot")
for k in range(0, 100):
data_x, data_y = func_A(a, k)
print("iteration", k)
print("data_x", data_x)
print("data_y", data_y)
if k == 0:
ax1 = plt.subplot(111)
line1, = ax1.plot([0], [0])
else:
line1.set_xdata(data_x)
line1.set_ydata(data_y)
ax1.set_ylim([-1, 1])
ax1.set_xlim([0, 100])
plt.grid("both")
canvas.draw()
canvas.flush_events()
root.mainloop()
【问题讨论】:
标签: python tkinter real-time-updates