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

Python使用Tkinter编写秒表出现溢出崩溃,求代码修复

问题分析

你遇到的程序崩溃不是溢出导致的,核心问题是Tkinter的运行逻辑被阻塞:

  • Tkinter是单线程运行的,按钮回调函数functio里的while True死循环会一直占用主线程,导致root.mainloop()无法执行UI刷新、事件响应的逻辑,程序直接卡死
  • 反复创建、销毁Label控件属于无意义操作,额外占用运行资源
  • time.sleep(0.5)会直接卡住主线程,即使没有死循环也会导致UI无响应,Tkinter做定时任务要使用自带的after()方法
修复后可运行代码
import time
from tkinter import *

root = Tk()
root.title("简易秒表")
start_time = None
running_flag = False

# 提前创建时间显示控件,仅修改文本即可,无需反复创建销毁
time_display = Label(root, text="0.0", font=("Arial", 22))
time_display.pack(pady=25)

def refresh_time():
    global start_time, running_flag
    if running_flag:
        passed_time = round(time.time() - start_time, 1)
        time_display.config(text=str(passed_time))
        # 500毫秒后自动调用自身更新时间,替代死循环+sleep
        root.after(500, refresh_time)

def start_count():
    global start_time, running_flag
    if not running_flag:
        start_time = time.time()
        running_flag = True
        refresh_time()

def stop_count():
    global running_flag
    running_flag = False

Button(root, text='开始计时', command=start_count, font=("Arial", 15)).pack(pady=10)
Button(root, text='停止计时', command=stop_count, font=("Arial", 15)).pack(pady=10)

root.mainloop()
修改说明
  • 移除了回调函数内的死循环,改用after()实现定时更新,不会阻塞Tkinter主事件循环
  • 仅创建一次时间显示Label,后续仅修改文本内容,无额外资源开销
  • 新增运行状态标记,避免重复点击启动按钮导致计时异常
  • 时间默认保留1位小数,可根据需求自行调整精度

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 23:06:02