python tkinter 用class写个图表的定时刷新
时间: 2023-10-31 10:04:10 浏览: 235
下面是一个使用 `tkinter` 和 `matplotlib` 库的示例代码,用于定时刷新一个简单的图表:
```python
import tkinter as tk
import matplotlib.pyplot as plt
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
import numpy as np
class Graph:
def __init__(self, master):
self.master = master
self.master.title("Graph")
# 创建一个图形窗口
self.fig = plt.Figure()
# 在图形窗口中添加一个子图
self.ax = self.fig.add_subplot(111)
# 创建一个画布并添加到主窗口中
self.canvas = FigureCanvasTkAgg(self.fig, master=self.master)
self.canvas.get_tk_widget().pack(side=tk.TOP, fill=tk.BOTH, expand=1)
# 创建一个按钮用于开始和停止更新图表
self.button = tk.Button(master=self.master, text="Start", command=self.start_stop)
self.button.pack(side=tk.BOTTOM)
# 生成一些数据并绘制初始图表
self.x = np.arange(0, 2 * np.pi, 0.01)
self.y = np.sin(self.x)
self.line, = self.ax.plot(self.x, self.y)
# 设置更新图表的标志和时间间隔
self.update_flag = False
self.interval = 100 # 毫秒
def start_stop(self):
if not self.update_flag:
self.update_flag = True
self.button.config(text="Stop")
self.update_graph()
else:
self.update_flag = False
self.button.config(text="Start")
def update_graph(self):
# 更新数据
self.y = np.sin(self.x + np.random.randn(1) * 0.1)
self.line.set_ydata(self.y)
# 重新绘制图表
self.canvas.draw()
# 如果更新标志被设置为 True,则在指定时间间隔后继续更新图表
if self.update_flag:
self.master.after(self.interval, self.update_graph)
if __name__ == "__main__":
root = tk.Tk()
app = Graph(root)
root.mainloop()
```
该程序创建一个名为 `Graph` 的类,该类继承 `tkinter.Frame` 类,并包含一个名为 `start_stop` 的方法,用于开始或停止更新图表。该类还包含一个名为 `update_graph` 的方法,该方法将在指定的时间间隔内更新图表,并在更新标志被设置为 True 时循环调用自身以继续更新图表。程序还使用 `numpy` 库生成一些随机数据并绘制初始图表。
要运行该程序,请确保已安装了 `tkinter` 和 `matplotlib` 库,并使用以下命令运行 Python 脚本:
```bash
python script.py
```
其中 `script.py` 是包含上述代码的 Python 脚本的文件名。
阅读全文