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
我假设这充当某种前向声明,并且实际代码调用了一些Tcl或Tk方法来创建解释器(?),但是Tcl或Tk库都没有它列出,而且我对tkinter实际如何连接到Tk感到非常困惑。
在任何情况下,Tk库 都具有Tk_Mainloop的条目,但是此方法不接受任何参数。
我已经看到a few references to mainloop(1)
修复了IDLE的问题,这表明它确实有效果,但是没有任何解释原因
我尝试使用n
的几个不同值来查看会发生什么(从Ubuntu中的命令行运行我的程序):
0
也会这样做1
会使程序立即退出666
无法打开通往地狱的门户,但确实会使程序立即退出传递-1
可以使程序正确运行,直到终止为止,此时程序挂起并吐出几种类型的错误消息:
无效的命令名称“ 140030630824136update” 在执行时 “ 140030630824136更新” (“之后”脚本)
说实话,我不确定如何解释这些结果。我可以猜测该参数在某种程度上与终止后将控制权返回给父级有关,但仅此而已。
总结:
Tkinter的mainloop()函数的数字参数'n'实际起什么作用?
(我加入了[tk]标签,因为我认为答案可能在Tk本身之内,而不是tkinter内。