Python:Tkinter中的after()是否有多​​线程方法?

时间:2012-06-15 08:03:51

标签: python tkinter python-multithreading

我正在编写一个物理模拟程序,并发现after()很有用。

我曾经想为物理计算和模拟创建一个线程。但是当我最终注意到这个功能时,我却用它了。

所以,我很好奇Tkinter如何实现这个功能。它是多线程的吗?

2 个答案:

答案 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()