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()
vsroot.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实例才能工作。每天学点新东西。谢谢你的小说,你和布莱恩之间我的困惑已经消除了。