界面显示动态的数据。
from time import sleep
import serial
import tkinter as tk
lis=[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)/10
print("\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中断信号后关闭串口