界面显示动态的数据。
from time import sleep
import serialimport tkinter as tklis=[1,10,40]
# 打开串行端口
ser = serial.Serial('COM3', 9600) # 9600为波特率,根据实际情况进行调整# 创建窗口和画布
window = tk.Tk()
canvas = tk.Canvas(window, width=400, height=300)
canvas.pack()# 假设你的列表长这样,其中每个元素都是一个包含编号和值的元组
data = [(1, 10),(2, 15),(3, 20),# ... 其他元素(19, 35),(20, 40)
]# 定义绘制接线图的函数
def draw_line_chart(data):canvas.delete("all") # 清空画布# 计算画布的宽度和高度canvas_width = canvas.winfo_width()canvas_height = canvas.winfo_height()# 计算每个点的坐标x_scale = canvas_width / len(data)y_scale = canvas_height / max([item[1]+10 for item in data])points = [(item[0] * x_scale, canvas_height - item[1] * y_scale) for item in data]# 绘制连接线for i in range(len(points) - 1):canvas.create_line(points[i], points[i+1])# 绘制数据点for point in points:canvas.create_oval(point[0]-2, point[1]-2, point[0]+2, point[1]+2, fill="red")# 初始绘制
draw_line_chart(data)# 模拟数据更新
def update_data():# 更新数据data = [(index, value) for index, value in enumerate(lis, start=1)] # 更新你的数据# 调用绘制函数draw_line_chart(data) # 每隔一段时间更新数据canvas.after(1000, update_data)try: if ser.in_waiting > 0: # 如果串口有数据可读 data = ser.read() # 读取一行数据并解码为字符串ser.reset_input_buffer()tmp=(ord(data)+100)/10print("\r测到的温度是:", tmp,'°C',end=' ')lis.append(tmp)while len(lis)>50:lis.pop(0)print(lis,end=' ')except Exception as error:print(error)ser.close() # 捕获Ctrl+C中断信号后关闭串口 print("程序已停止")pass# 启动数据更新
canvas.after(1000, update_data)# 运行窗口主循环
window.mainloop()
ser.close() # 捕获Ctrl+C中断信号后关闭串口