Tkinter的mainloop()函数的数字参数'n'实际起什么作用?

时间:2018-08-08 11:57:51

标签: python tkinter tk

第一部分:在其中我发现了奇怪之处

Tkinter的mainloop()方法is used to run the main event loop-毫无意外。几乎在每个教程中都会出现这种情况,每一个教程中都会调用一个不带参数的

但是,查看代码可以发现该方法实际上接受了一个参数n,其默认值为0(tkinter.__init.py,第558行):

def mainloop(n=0):
    """Run the main loop of Tcl."""
    _default_root.tk.mainloop(n)

第二部分:在其中我尝试破译代码库

_default_root解析为根Tk对象,该对象在同一文件的第1996行中定义,并且tk字段在2020行中设置为:

self.tk = _tkinter.create(screenName, baseName, className, interactive, wantobjects, useTk, sync, use)

不幸的是,目前尚不清楚tk到底是什么,因为_tkinter.create(显然是在_tkinter模块中定义的)似乎具有以下定义(即PyCharm告诉的内容)我的声明是):

def create(*args, **kwargs): # real signature unknown
    """
    wantTk
        if false, then Tk_Init() doesn't get called
      sync
        if true, then pass -sync to wish
      use
        if not None, then pass -use to wish
    """
    pass

第3部分:向互联网寻求建议

我假设这充当某种前向声明,并且实际代码调用了一些Tcl或Tk方法来创建解释器(?),但是TclTk库都没有它列出,而且我对tkinter实际如何连接到Tk感到非常困惑。

在任何情况下,Tk库 都具有Tk_Mainloop的条目,但是此方法接受任何参数。

我已经看到a few references to mainloop(1)修复了IDLE的问题,这表明它确实有效果,但是没有任何解释原因

第4部分:我尝试使用各种n值来查看会发生什么情况

我尝试使用n的几个不同值来查看会发生什么(从Ubuntu中的命令行运行我的程序):

  • 没有参数能按预期工作
  • 通过0也会这样做
  • 传递1会使程序立即退出
  • 传递666无法打开通往地狱的门户,但确实会使程序立即退出
  • 传递非整数args会导致程序以TypeError(如预期的那样)停止
  • 传递-1可以使程序正确运行,直到终止为止,此时程序挂起并吐出几种类型的错误消息:

    无效的命令名称“ 140030630824136update”     在执行时 “ 140030630824136更新”     (“之后”脚本)

说实话,我不确定如何解释这些结果。我可以猜测该参数在某种程度上与终止后将控制权返回给父级有关,但仅此而已。

第5部分:在此我向StackOverflow寻求帮助

总结:

Tkinter的mainloop()函数的数字参数'n'实际起什么作用?

(我加入了[tk]标签,因为我认为答案可能在Tk本身之内,而不是tkinter内。

0 个答案:

没有答案