我正在编写一个物理模拟程序,发现after()
很有用。
我曾经想为物理计算和模拟创建一个线程。但是当我终于注意到这个功能时,我改用了它。
所以,我很好奇 Tkinter 是如何实现这个功能的。是多线程吗?
我正在编写一个物理模拟程序,发现after()
很有用。
我曾经想为物理计算和模拟创建一个线程。但是当我终于注意到这个功能时,我改用了它。
所以,我很好奇 Tkinter 是如何实现这个功能的。是多线程吗?
它不是多线程的。
Tkinter 通过从队列中拉出对象并处理它们来工作。通常,此队列中的内容是用户生成的事件(鼠标移动、按钮单击等)。
此队列可以包含其他内容,例如使用创建的作业after
。因此,对于 Tkinter 而言,提交的after
内容只是在特定时间点要处理的另一个事件。
以下脚本将冻结 GUI 5 秒钟,因此它不是多线程的:
from Tkinter import Tk, Label
from time import sleep
root = Tk()
w = Label(root, text="Hello, world!")
w.pack()
w.after(100, lambda: sleep(5))
root.mainloop()