tk.mainloop() 对比 root.mainloop()?

tk.mainloop() vs root.mainloop()?

我试图找到一些 Q/A 或有关 tk.mainloop()root.mainloop() 的使用的文章,但没有成功。

我的问题是:这两种用途有什么区别吗?对我来说,正确的方法是使用 tk_instance_variable_name.mainloop() 与仅使用 tk.mainloop() 但据我所知,两者似乎都可以正常工作。有什么理由需要避免 tk.mainloop() 还是只是一种偏好。

如果之前有人问过这个问题,请提供 Q/A link,因为我找不到它。我觉得它已经被问过了,但没有找到它。

有人可以解释为什么 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

I have tried to find some Q/A or article about the use of tk.mainloop() vs root.mainloop() with no success.

My question is this: Is there any difference between the 2 uses.

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

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

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

顺便说一句,每个 tkinter 小部件都继承了该方法,所以这也有效:

import tkinter as tk

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