2

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

我的问题是:这两种用途之间有什么区别吗?对我来说,正确的方法是使用tk_instance_variable_name.mainloop()vs 只是做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
4

2 回答 2

6

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

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

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

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

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

于 2018-07-19T17:13:26.607 回答
1

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

import tkinter as tk

lbl = tk.Label(text="Test")
lbl.pack()
lbl.mainloop()
于 2018-07-19T17:25:24.307 回答