tk.mainloop()与root.mainloop()吗?

时间:2018-07-19 16:58:52

标签: python tkinter mainloop

我试图找到一些有关tk.mainloop()root.mainloop()的使用的问答,但未成功。

我的问题是:这两种用途之间是否有区别?在我看来,正确的方法是使用tk_instance_variable_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

2 个答案:

答案 0 :(得分:5)

  

我试图找到一些有关使用tk.mainloop()与root.mainloop()的问题的问答,但没有成功。

     

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

简短的回答:在正常使用情况下没有区别。

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

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

答案 1 :(得分:1)

顺便说一句,每个tkinter小部件都继承该方法,因此它也可以工作:

import tkinter as tk

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