我使用 Tkinter GUI 已经有一段时间了。我想知道 after
方法实际上是如何工作的。我的问题很简单。
after
方法如何在 Tkinter 内部实现?after
调用是否是线程化的?- Tkinter 中多次
after
调用有何缺点(如果有)? after
回调是如何安排的?
我确实浏览了几个链接,例如 this 。但无法获取这些信息。
最佳答案
after()
调用 Tck/Tk 的after
命令,该命令注册一个稍后由 Tcl/Tk 事件循环调用的回调。after()
调用不是线程化的。一个问题是,阻塞或长时间运行的操作可能会导致使用
after()
安排的某些操作的运行时间明显晚于您的预期。还有更多可能相关的优点和缺点,但您需要具体说明您的担忧或用例...回调被注册到 Tcl/Tk 事件循环中,负责调度。有关其工作原理的详细信息,请参阅 the documentation .
说明:
您可能已经知道,Tkinter 使用 Tcl/Tk内部。
看看the code for the after()
method ,看起来 Tkinter 只是调用 Tcl/Tk after
命令。
documentation for Tcl/Tk's after
command没有提到任何有关线程的内容。这是有道理的 Tcl/Tk's single-threaded event loop design .
所以,我的结论是 Tkinter 的 after()
方法不使用线程,而只是使用内部 Tcl/Tk after< 注册回调
命令,Tcl/Tk event loop 将在最合适的时间调用该命令。 .
关于python - 方法后 Tkinter 的内部工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31259524/