【问题标题】:What is the n parameter of tkinter.mainloop function?tkinter.mainloop 函数的 n 参数是什么?
【发布时间】:2018-12-25 11:40:01
【问题描述】:

n 参数可以赋予tkinter.mainloop 函数,

help(tkinter.Tk.mainloop)
>>>> mainloop(self, n=0) # What is n here ?
     Call the mainloop of Tk.

我找不到任何关于它的文档

这个n 参数的目的是什么?

【问题讨论】:

  • 您在哪里找到对n 参数的引用?我在任何文档或使用示例中都找不到它。
  • @Prune, help(tkinter.Tk.mainloop) 将函数描述为mainloop(self, n=0)
  • 该死的......从那里没有线索。我也试图找到参考资料。刚刚看到@Novel 的评论;我对DoOneEvent 持怀疑态度,但找不到将其链接回Mainloop 参数的明确引用。
  • @Prune 这与DoOneEvent 无关。看我的回答。

标签: python tkinter


【解决方案1】:

正如您在 Tkinter 的 C 实现中看到的,_tkinter_tkapp_mainloop_impl

_tkinter_tkapp_mainloop_impl(TkappObject *self, int threshold)

n代表传递给函数的threshold参数。

现在,查看实现本身,可以在函数的开头看到这个循环,

 while (Tk_GetNumMainWindows() > threshold &&
       !quitMainLoop &&
       !errorInCmd)

因此,您可以看到,当 根级别 窗口的数量降至 threshold 或以下时,代码将退出 mainloop

请注意,默认情况下,可选参数的值为0,这在逻辑上意味着如果任何 根级别,它将保持活动状态窗户打开了。

更多信息

我无法评论为什么要添加此 threshold 参数,但缺少有关此特定参数的文档和/或信息很可能是因为很少有人会明确传递 ntkinter.mainloop 并更改默认行为。

【讨论】:

  • 由于您选择的术语,这个答案有点误导。这不是 顶级 窗口的数量(即:不考虑 Toplevel 的实例)。它是根窗口的数量——那些通过实例化Tk 创建的窗口。您可以通过观察创建一个根和多个顶层与多个根的程序中的差异来了解这一点。
  • @BryanOakley 实际上我刚刚证实了这一点,您似乎是对的。我编辑了。感谢您的反馈。
  • 挖掘文件的历史,它是added Nov 10, 1994。提交消息不是很有启发性:“添加了计时器和文件回调以及全局主循环并退出 fns”。 (该文件的第一次提交是 1994 年 6 月)。
猜你喜欢
  • 1970-01-01
  • 2014-11-04
  • 2020-05-09
  • 1970-01-01
  • 2022-12-16
  • 1970-01-01
  • 1970-01-01
  • 2014-08-18
  • 1970-01-01
相关资源
最近更新 更多