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

Tkinter实现计时器时变量直接归零,不按秒倒计时如何解决?

问题原因
  • 第一:你的while循环没有加任何阻塞逻辑,会以CPU最快的速度连续执行,瞬间就把time_1从60减到0。循环走完时你已经启动了60个延时1秒的更新任务,等1秒后执行更新时time_1早就变成0,自然看不到倒计时效果。
  • 第二:Tkinter的UI组件更新操作必须在主线程执行,用threading.Timer开子线程修改Label属性属于非线程安全操作,容易触发界面崩溃、无响应等异常。
  • 第三:你写的while time_1 and time_2 > 0判断逻辑存在问题,实际判定规则是time_1不为0 且 time_2大于0,并不是你预期的「两个变量都大于0」的效果。
修复方案

推荐使用Tkinter自带的after()方法实现延时调度,不需要额外开启线程,逻辑更简单也更安全,修复后的可运行代码如下:

import tkinter as tk
from tkinter import ttk

root = tk.Tk()
root.title("Chess Timer")
root.minsize(250,250)

time_1 = 60.0
time_2 = 60.0

timer_1 = ttk.Label(root, text=time_1)
timer_1.grid(column=1, row=0, padx=20)
timer_2 = ttk.Label(root, text=time_2)
timer_2.grid(column=2, row=0, padx=20)

def update_timer():
    global time_1, time_2
    # 两个计时器都大于0时才继续倒计时
    if time_1 > 0 and time_2 > 0:
        time_1 -= 1
        # 更新界面显示
        timer_1.config(text=time_1)
        timer_2.config(text=time_2)
        # 1000毫秒后再次调用自身,实现每秒执行一次的效果
        root.after(1000, update_timer)

# 启动倒计时
update_timer()
root.mainloop()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 05:54:00