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-
相关产品推荐
相关产品推荐

