Python 变量类的父类是否需要是Tk实例?

Python 变量类的父类是否需要是Tk实例?,python,tkinter,Python,Tkinter,我所看到的大多数示例都是在没有显式父对象的情况下实例化的(例如var=tk.StringVar()),我假设大多数其他小部件(如果不是全部)默认为当前tk实例,通常放在变量root中。这就是为什么我不确定它的父对象是否需要是一个(通常是当前的,并且是唯一的)Tk实例,或者它是否可以是任何小部件 变量类的父类是否需要是Tk实例?此外,下面类的任何属性是否有任何错误 try: import tkinter as tk except: import Tkinter as tk cl

我所看到的大多数示例都是在没有显式父对象的情况下实例化的(例如
var=tk.StringVar()
),我假设大多数其他小部件(如果不是全部)默认为当前
tk
实例,通常放在变量
root
中。这就是为什么我不确定它的父对象是否需要是一个(通常是当前的,并且是唯一的)
Tk
实例,或者它是否可以是任何小部件

变量类的父类是否需要是Tk实例?此外,下面类的任何属性是否有任何错误

try:
    import tkinter as tk
except:
    import Tkinter as tk


class MyEntry(tk.Entry):
    def __init__(self, master, *args, **kwargs):
        tk.Entry.__init__(self, master, *args, **kwargs)

        self.var1 = tk.BooleanVar(self)
        # parent is exclusively the Entry widget
        self.var2 = tk.DoubleVar(master)
        # parent is master widget, not necessarily a Tk instance
        self.var3 = tk.IntVar()
        # parent is exclusively the current Tk instance, implicitly
        self.var4 = tk.StringVar(self._root())
        # parent is the Tk instance MyEntry object is a (grand)child of, exclusively


if __name__ == '__main__':
    root = tk.Tk()
    frame = tk.Frame(root)
    entry = MyEntry(frame)
    frame.pack()
    entry.pack()
    root.mainloop()

,父实例不必是Tk实例

在上述所有类及其超类的docstring
Variable
中,有一行:

...
    def __init__(self, master=None, value=None, name=None):
        """Construct a string variable.

        MASTER can be given as master widget.
...
其中我假设
MASTER
引用了参数
MASTER
,表示MASTER可以是一个小部件,因此我假设变量类的
MASTER
可以是任何小部件


我不认为任何变量类实例化都有任何问题,尽管在大多数情况下,有些可能过于显式,并且大部分是冗余的

也就是说,在提供的代码中,虽然所有这些都很好(没有
Tk
实例,小部件就不可能存在),但我相信
self.var1=Tk.BooleanVar(self)
是从OOP角度实例化它的最佳结构化方式,因为它允许最包含
self
的方法:

try:
    import tkinter as tk
except:
    import Tkinter as tk


class MyEntry(tk.Entry):
    def __init__(self, master, *args, **kwargs):
        tk.Entry.__init__(self, master, *args, **kwargs)

        self.var1 = tk.BooleanVar(self)


if __name__ == '__main__':
    root = tk.Tk()
    entry = MyEntry(root)
    entry.pack()
    root.mainloop()

它可以是任何小部件,但除了根小部件之外,它没有任何优势。
变量
类(从中继承
StringVar
等)的实现只是使用给定的主窗口来查找根窗口。根窗口是它真正关心的全部,一旦它知道根窗口,它就不会将主窗口用于其他任何事情

我的猜测是,提供的父对象是不相关的,Var只对
根对象感兴趣。它可以是任何小部件,它将具有与使用该小部件使用的Tk实例相同的效果。也就是说,好的代码只有一个Tk()实例,变量默认为该实例,因此不需要提供任何东西。内存管理如何?在上面的代码中,与其他对象相比,任何变量类对象是否会持续更长时间或导致其他类型(更高,如果有的话)的内存泄漏?