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

Tkinter应用每1秒生成新Canvas而非更新原画布问题求助

Tkinter画布实时更新解决方案

你的代码问题出在每次执行main()都会新建一个Canvas组件并添加到窗口,导致画布不断向下叠加。要实现单画布实时更新,按以下方式修改代码:

修改后的完整代码

from tkinter import *
from random import randint

root = Tk()
root.geometry("250x250")  # 只设置一次窗口尺寸
lab = Label(root)
lab.pack()

# 只初始化一次画布,放在全局作用域
canvas = Canvas(root)
canvas.pack(fill=BOTH, expand=1)

def main():
    y = randint(0, 1000)
    print(y)
    x = 250

    # 清空画布所有原有内容
    canvas.delete("all")

    # 重新绘制所有图形
    canvas.create_line(0, y/2, x, y/2, width=2, fill="#ffffff")
    canvas.create_rectangle(0, 0, 250, y/2-1, outline="#0000CD", fill="#0000CD")
    canvas.create_rectangle(0, 250, 250, y/2+1, outline="#734a12", fill="#734a12")
    
    # 中间线条
    canvas.create_line(100, 145, 150, 145, width=2, fill="#ffffff")
    canvas.create_line(110, 165, 140, 165, width=2, fill="#ffffff")
    canvas.create_line(100, 185, 150, 185, width=2, fill="#ffffff")
    canvas.create_line(110, 205, 140, 205, width=2, fill="#ffffff")
    canvas.create_line(100, 225, 150, 225, width=2, fill="#ffffff")
    canvas.create_line(110, 245, 140, 245, width=2, fill="#ffffff")

    canvas.create_line(100, 105, 150, 105, width=2, fill="#ffffff")
    canvas.create_line(110, 85, 140, 85, width=2, fill="#ffffff")
    canvas.create_line(100, 65, 150, 65, width=2, fill="#ffffff")
    canvas.create_line(110, 45, 140, 45, width=2, fill="#ffffff")
    canvas.create_line(100, 25, 150, 25, width=2, fill="#ffffff")
    canvas.create_line(110, 5, 140, 5, width=2, fill="#ffffff")
    canvas.create_line(90, 125, 170, 125, fill="#ffff00", width=3, dash=(4, 2))

    # 调度下一次更新
    root.after(1000, main)

# 启动定时更新
main()
root.mainloop()

关键改动说明

  • 单一画布实例:把canvas = Canvas(root)移到全局初始化部分,整个程序只创建一个画布
  • 清空画布:每次更新前用canvas.delete("all")清除原有所有绘制内容,再重新绘制新图形
  • 正确的定时调度:只通过root.after(1000, main)实现每秒更新,移除原代码中main()内部的递归调用,避免栈溢出问题
  • 初始化操作复用:窗口尺寸设置、画布布局等操作只执行一次,无需重复调用

界面效果

内容的提问来源于stack exchange,提问作者Emin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 05:29:59