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

Tkinter计时器问题:time.sleep致窗口卡顿,求正常计时方案

修复Tkinter倒计时计时器卡顿问题

原代码的核心问题有两个:

  • 用while循环阻塞了Tkinter的主事件循环,导致窗口无法响应任何操作
  • 每次调用timer()都会重置d=60,且循环内递归调用timer()会引发大量重复任务,逻辑彻底混乱

下面是修复后的代码:

from tkinter import *

def timer(remaining=60):
    if remaining > 0:
        m, s = divmod(remaining, 60)
        mo = 'Время:{:02d}:{:02d}'.format(m, s)
        tablo['text'] = mo
        # 1秒后继续调用timer,传入递减后的剩余时间
        window.after(1000, timer, remaining - 1)
    else:
        tablo['text'] = 'Время: 00:00'

window = Tk()
window.geometry('900x600')
tablo = Label(text='Время: 60', font="Courier 20 bold")
tablo.place(x=10, y=10)

start = Button(text="start", command=timer, width=10, font="Courier 15 bold")
start.place(x=300, y=10)

def exit_app():
    window.quit()
exit_btn = Button(text="exit", command=exit_app, width=10, font="Courier 15 bold")
exit_btn.place(x=600, y=10)

window.mainloop()

关键改动说明:

  • 把剩余时间remaining作为timer函数的参数,默认值设为60,每次递归调用时传递递减后的数值,避免重复重置时间
  • 移除while循环,改用window.after()实现延迟1秒后更新时间,完全不阻塞Tkinter的主事件循环
  • 重命名了原exit按钮的变量名(exit是Python内置关键字,避免命名冲突)

修改后,计时器会正常每秒递减,窗口不会卡顿,按钮操作也能正常响应。

内容的提问来源于stack exchange,提问作者Дмитрий

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 01:47:27