Python tk.mainloop()与root.mainloop()的比较?

Python tk.mainloop()与root.mainloop()的比较?,python,tkinter,mainloop,Python,Tkinter,Mainloop,我试图找到一些关于tk.mainloop()vsroot.mainloop()使用的问答或文章,但没有成功 我的问题是:这两种用途之间有什么区别吗。对我来说,正确的方法是使用tk\u实例\u变量\u name.mainloop()而不是仅仅执行tk.mainloop(),但从我所看到的情况来看,两者似乎都工作得很好。是否有任何理由需要避免使用tk.mainloop(),或者这只是一种偏好 如果之前有人问过这个问题,请提供Q/A链接,因为我无法找到它。我觉得它应该已经被问过了,但是没有运气去寻找它

我试图找到一些关于
tk.mainloop()
vs
root.mainloop()
使用的问答或文章,但没有成功

我的问题是:这两种用途之间有什么区别吗。对我来说,正确的方法是使用
tk\u实例\u变量\u name.mainloop()
而不是仅仅执行
tk.mainloop()
,但从我所看到的情况来看,两者似乎都工作得很好。是否有任何理由需要避免使用
tk.mainloop()
,或者这只是一种偏好

如果之前有人问过这个问题,请提供Q/A链接,因为我无法找到它。我觉得它应该已经被问过了,但是没有运气去寻找它

有人能解释一下为什么
tk.mainloop()
会在这里工作,因为我觉得它不应该在tk实例变量名上使用

使用
root
按预期工作的示例:

import tkinter as tk

root = tk.Tk()
tk.Label(root, text="Test").pack()
root.mainloop() # using the variable name root
据我所知,使用
tk
的示例效果良好:

import tkinter as tk

root = tk.Tk()
tk.Label(root, text="Test").pack()
tk.mainloop() # using tk
我试图找到一些关于使用tk.mainloop()与root.mainloop()的问答或文章,但没有成功

我的问题是:这两种用途之间有什么区别吗

简短回答:在正常用例中没有区别

每个小部件都有一个关联的tcl解释器,该解释器是在创建根小部件时创建的,无论是显式的还是隐式的。当您从任何小部件调用
mainloop
时,它将在与该小部件的根窗口关联的解释器中运行
mainloop
函数


如果调用属于
tkinter
模块的
mainloop
方法(例如:
tk.mainloop()
),它将调用默认解释器的
mainloop
函数。默认解释器是创建的第一个解释器。因此,在
Tk
的单个实例的正常情况下,
Tk.mainloop()
root.mainloop()
调用完全相同的代码。

import tkinter as tk

lbl = tk.Label(text="Test")
lbl.pack()
lbl.mainloop()

不,没有区别
tk.mainloop()
是一个帮助函数,用于查找根实例并调用
root.mainloop()
@小说我看到你链接到了看起来像源代码的东西,但我仍然不明白
tk.mainloop()
如何知道在
root
上循环。对于多个tk实例来说,这不是一个问题吗。在某些情况下,有多个tk实例可用,因此在这种情况下,
tk.mainloop()
会失败吗?当您创建一个
tk()
实例时,全局变量
tkinter.\u default\u root
会被设置,如果它还没有设置。因此_default_root是创建的
Tk()
的第一个实例。如果您有多个
Tk()
(您不应该这样做),那么
tkinter.mainloop()
是您创建的第一个
Tk()
实例的
mainloop()
方法的别名。@Novel我猜在添加新代码时,行被扭曲了。OP询问的是
tkinter.mainloop()
函数;不是一个小部件方法。如果TK不太可能,我意识到有两个活动实例。我只是想涵盖所有选项。我想我还是想绕着它转。所以从你所说的和@Novel所说的,让我看看我是否明白了。因此,无论我如何调用
mainloop()
(通过变量名或直接针对tk导入),mainloop()函数都应该查找默认实例并在其上循环。@Mike SMT:否。如果在小部件上调用,它将为与该小部件关联的解释器调用mainloop函数。如果调用模块级别1,它将在创建的第一个解释器上调用它。我会尽力澄清我的答案。@BryanOakley最大的区别是
tkinter.mainloop()
无法知道要使用哪个
Tk()
instance/tcl解释器,所以它使用了创建的第一个解释器。谢谢Bryan。我想我知道这里发生了什么。我没有意识到
mainloop()
的编码方式可以在默认解释器上工作。我最初的理解是,
mainloop()
需要直接用于tk实例才能工作。每天学点新东西。谢谢你的小说,你和布莱恩之间我的困惑已经消除了。