tkinter之after
引言
问题现象1:运行调试或打包的时候需要等待很长时间
问题现象2:运行起来的软件经常:无反应,鼠标一直转圈圈
解释
首先python默认是同步执行,记住这个前提!!!
我们在运行或打包的时候程序默认会执行初始化操作,或是当我们点击某个按钮的时候,执行的方法里面有些程序运行比较时间比较长的,就会等执行完后才可以操作下一步,就会造成上面的的问题现象
解决
思路:我们在任何有交互的动作都做异步处理,让执行慢的程序在后台自己去慢慢执行,而不影响我们操作软件界面
tkinter的after功能,相当于帮我们做了异步操作。必须要有回调方法,否则是延迟执行,类似sleep(5)
root.after(毫秒,回调方法,参数1,参数2...)
演示
- root.after(毫秒)
# 会等待5秒再执行,类似sleep(5)
print(datetime.now())
root.after(5000)
print(datetime.now())
# 输出
2024-07-01 16:08:57.862940
2024-07-01 16:09:02.875650
- root.after(毫秒,回调方法)
print(datetime.now())
# 会立马执行,异步执行5秒后的回调函数
root.after(5000,lambda:print('after 回调执行了 '+str(datetime.now())))
print(datetime.now())
# 输出
2024-07-01 16:10:51.975375
2024-07-01 16:10:51.975375
after 回调执行了 2024-07-01 16:10:56.990617