You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.19 08:45:04