python - 方法后 Tkinter 的内部工作

标签 python tkinter

我使用 Tkinter GUI 已经有一段时间了。我想知道 after 方法实际上是如何工作的。我的问题很简单。

  1. after 方法如何在 Tkinter 内部实现?
  2. after 调用是否是线程化的?
  3. Tkinter 中多次 after 调用有何缺点(如果有)?
  4. after回调是如何安排的?

我确实浏览了几个链接,例如 this 。但无法获取这些信息。

最佳答案

  1. after() 调用 Tck/Tk 的 after 命令,该命令注册一个稍后由 Tcl/Tk 事件循环调用的回调。

  2. after() 调用不是线程化的。

  3. 一个问题是,阻塞或长时间运行的操作可能会导致使用 after() 安排的某些操作的运行时间明显晚于您的预期。还有更多可能相关的优点和缺点,但您需要具体说明您的担忧或用例...

  4. 回调被注册到 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/

相关文章:

python - Bazel:从 py_library 中的 python 文件创建 py_binary

python - PyQt5 StatusBar 分隔符

python - 更改标签上的文本

python - 尝试获取一个按钮来更改文本小部件

python - 如何将数据从一个 Tkinter 文本小部件复制到另一个?

python-3.x - Python 3 Tkinter - 以顶层为主机的消息框?

python - 如何在 Windows 7 上安装适用于 python 2.7 的 tkinter 或 Tcl?

Javascript 扩展函数返回的内容?

python - 如何运行 Jinja2 的所有单元测试?

python - 如何在 pandas groupby 中包含零交叉项?