tk.mainloop() против root.mainloop()?
Я попытался найти некоторые Q/A или статью об использовании tk.mainloop()
против root.mainloop()
без успеха.
Мой вопрос заключается в следующем: есть ли разница между 2 использованиями. Мне кажется, что правильным методом было бы использовать 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 ответа
Я попытался найти некоторые Q/A или статью об использовании tk.mainloop() против root.mainloop() безуспешно.
Мой вопрос заключается в следующем: есть ли разница между 2 использованиями.
Короткий ответ: нет разницы в нормальном случае использования.
У каждого виджета есть связанный интерпретатор tcl, который создается при создании корневого виджета, явно или неявно. Когда вы звоните mainloop
из любого виджета, он будет запускать mainloop
функция в интерпретаторе, связанная с корневым окном этого виджета.
Если вы позвоните mainloop
метод, который является частью tkinter
модуль (например: tk.mainloop()
в вашем примере), он будет называть mainloop
функция интерпретатора по умолчанию. По умолчанию интерпретатор является первым созданным интерпретатором. Таким образом, в обычном случае одного экземпляра Tk
, tk.mainloop()
а также root.mainloop()
назовите точно такой же код.
Кстати, каждый виджет tkinter наследует этот метод, так что это тоже работает:
import tkinter as tk
lbl = tk.Label(text="Test")
lbl.pack()
lbl.mainloop()