使用tkinter如何实现从JSON读取坐标并持续更新画布对象位置
实现JSON修改后自动更新画布的方法
问题原因
现有代码仅在程序启动时读取一次JSON文件完成多边形初始化,进入Tkinter主循环后没有重读文件、更新坐标的逻辑,因此修改JSON文件后画布不会自动刷新。
实现步骤
通过Tkinter内置的after()定时方法,周期性重读JSON并更新画布对象坐标即可:
- 修改坐标读取函数,显式将字符串坐标转为整数,避免格式兼容问题
- 新增坐标更新函数,每次执行时重读JSON文件,调用画布
coords()方法更新多边形位置 - 在更新函数末尾递归调用
after(),实现周期自动执行
完整修改后代码
import json from tkinter import * def read(number): with open("coords.json", "r") as f: data = f.read() json_object = json.loads(data) s = f"coords_{number}" # 显式将坐标转为整数 return list(map(int, json_object[s])) def update_coords(): try: # 重新读取最新坐标 coords1 = read(1) coords2 = read(2) # 更新两个多边形的坐标 canvas.coords(object_1, *coords1) canvas.coords(object_2, *coords2) except Exception as e: # 捕获JSON格式错误等异常,避免修改JSON时程序崩溃 print(f"坐标更新失败:{e}") # 间隔1000ms(1秒)再次执行更新,可根据需要调整间隔时长 root.after(1000, update_coords) root = Tk() root.geometry('500x500') canvas = Canvas(root, height = 500, width = 500) # 初始化多边形 object_1 = canvas.create_polygon(read(1), outline="blue", fill="orange", width=2) object_2 = canvas.create_polygon(read(2), outline="blue", fill="green", width=2) canvas.place(x=0,y=0) # 启动定时更新任务 update_coords() root.mainloop()
内容的提问来源于stack exchange,提问作者Alex Hagdahl
相关产品推荐
相关产品推荐

