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

如何实现点击按钮后持续倒计时的Tkinter画布文本计时器

Tkinter倒计时计时器修复方案

问题根源

  • time.sleep()会阻塞Tkinter的主事件循环,导致界面无法实时刷新,所有文本更新都会等到循环结束后一次性显示,所以看起来点击按钮后直接跳到0:00。
  • 原代码的时间逻辑冗余复杂,分支判断过多,容易出现计算错误。

修复后的代码

from tkinter import Tk, Canvas, Button

BLUE = "#2c3e50"
FONT_NAME = "Courier"

def update_timer(remaining_seconds):
    # 计算当前分钟和秒数
    minutes = remaining_seconds // 60
    seconds = remaining_seconds % 60
    # 格式化时间字符串,秒数不足两位自动补0
    timer_str = f"{minutes}:{seconds:02d}"
    canvas.itemconfig(timer_text, text=timer_str)
    
    if remaining_seconds > 0:
        # 1秒后递归调用自身,继续倒计时
        window.after(1000, update_timer, remaining_seconds - 1)

def start_countdown():
    # 初始倒计时为2分钟,即120秒
    update_timer(120)

window = Tk()
window.title("倒计时器")
window.config(padx=100, pady=50, bg=BLUE)

canvas = Canvas(width=400, height=450, bg=BLUE, highlightthickness=0)
timer_text = canvas.create_text(200, 100, text="2:00", fill="white", font=(FONT_NAME, 35, "bold"))
canvas.grid(column=1, row=1)

start_button = Button(text="开始", command=start_countdown)
start_button.grid(column=0, row=2)

window.mainloop()

关键说明

  • 用window.after(1000, ...)替代time.sleep(),既实现了1秒的间隔,又不会阻塞主事件循环,保证界面能实时更新。
  • 直接以总秒数作为倒计时的核心变量,通过整数除法和取余计算分钟、秒数,简化逻辑。
  • 利用Python的格式化语法seconds:02d,自动处理秒数的补0需求,无需额外分支判断。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 04:35:27