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

Python:点击按钮导致Tkinter窗口无响应的问题排查

问题原因

Tkinter是单线程运行的,窗口的所有交互、刷新都依赖mainloop这个主事件循环。你写的while 0 == 0死循环加上time.sleep(30)会彻底占住主线程,让mainloop根本没机会处理窗口的任何事件,所以窗口就会无响应——虽然后台的print能正常运行,但窗口已经被卡死了。

解决方法

别用time.sleep和死循环,改用Tkinter自带的after()方法,它能在指定时间后调用函数,而且不会阻塞主事件循环。修改后的代码如下:

from tkinter import *

cookies_clicked = 0
cursors = 0

main_window = Tk()
main_window.title("Cookie Clicker")
main_window.geometry("900x500")

def add_cookies():
    global cookies_clicked, cursors
    cookies_clicked += cursors
    print(f"当前饼干数: {cookies_clicked}")
    # 30秒后再次调用自己,实现循环定时
    main_window.after(30000, add_cookies)

def click():
    global cursors
    cursors += 1
    # 第一次触发定时逻辑
    add_cookies()

up_1 = Button(main_window, text="Upgrade 1", command=click)
up_1.place(x=410, y=100)

main_window.mainloop()
关键说明
  • after(30000, add_cookies)表示30000毫秒(即30秒)后执行add_cookies函数
  • 在add_cookies里再次调用after,就能实现每30秒自动加饼干的循环效果
  • 这种方式不会抢占主线程,窗口能正常响应操作和刷新

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 10:18:19