我正在编写一个物理模拟程序,并发现after()
很有用。
我曾经想为物理计算和模拟创建一个线程。但是当我最终注意到这个功能时,我却用它了。
所以,我很好奇Tkinter如何实现这个功能。它是多线程的吗?
答案 0 :(得分:5)
它不是多线程的。
Tkinter通过从队列中提取对象并处理它们来工作。通常,此队列中的事件是用户生成的事件(鼠标移动,按钮单击等)。
此队列可以包含其他内容,例如使用after
创建的作业。因此,对于Tkinter,使用after
提交的内容只是在特定时间点处理的另一个事件。
答案 1 :(得分:1)
以下脚本将冻结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()