如何让代码在Tkinter窗口弹出后立即执行而非关闭后执行
解决Tkinter窗口弹出后立即执行计数的问题
问题出在window.mainloop()——这是Tkinter的事件循环,会一直占据线程直到窗口关闭,所以后面的while循环代码根本没机会运行,得等窗口关了才执行。另外直接用time.sleep()也不行,会把整个UI线程卡死,窗口会变成无响应状态。
正确的做法是用Tkinter自带的after()方法,它能在不阻塞事件循环的前提下,定时执行指定函数。修改后的代码如下:
from tkinter import Tk def count_numbers(current_num): if current_num < 10: print(current_num) print("Hi") # 200毫秒后再次调用自身,实现循环计数 window.after(200, count_numbers, current_num + 1) I = 1 window = Tk() window.title("Game") window.configure(width=500, height=300, bg='blue') window.geometry(f"+{I * 5}+0") # 启动计数 count_numbers(I) # 启动事件循环 window.mainloop()
这段代码的逻辑是:
- 定义
count_numbers函数,负责打印当前数字,然后通过after()安排200毫秒后继续调用自己,传入下一个数字 - 窗口创建完成后,直接调用
count_numbers(I)启动计数 - 最后启动事件循环,此时事件循环会同时处理UI刷新和定时执行的计数函数,不会出现阻塞
内容的提问来源于stack exchange,提问作者Human De dios
相关产品推荐
相关产品推荐

