1

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

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

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

4

2 回答 2

5

它不是多线程的。

Tkinter 通过从队列中拉出对象并处理它们来工作。通常,此队列中的内容是用户生成的事件(鼠标移动、按钮单击等)。

此队列可以包含其他内容,例如使用创建的作业after。因此,对于 Tkinter 而言,提交的after内容只是在特定时间点要处理的另一个事件。

于 2012-06-15T11:09:26.833 回答
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()
于 2012-06-15T08:23:48.027 回答