Python 对象和指定给它的tkinter对象之间有什么区别?

Python 对象和指定给它的tkinter对象之间有什么区别?,python,python-3.x,tkinter,Python,Python 3.x,Tkinter,我试图用面向对象的方法来理解一个程序,但这似乎并不顺利 我能够很好地理解下面的代码(我在网上找到的),但是我对根和我的gui之间的关系有一些疑问(在类定义下面找到) 我知道init方法中的label和button对象都会进入master对象(根对象),但让我困惑的是,在init方法执行之后,如何区分my_gui和root 类的init方法执行后,是否执行my_gui和 root成为同一事物,或者root现在是 my_gui 如果它们在init函数之后本质上是相同的 执行,那么就不需要my\u g

我试图用面向对象的方法来理解一个程序,但这似乎并不顺利

我能够很好地理解下面的代码(我在网上找到的),但是我对
我的gui
之间的关系有一些疑问(在类定义下面找到)

我知道init方法中的label和button对象都会进入master对象(根对象),但让我困惑的是,在init方法执行之后,如何区分
my_gui
root

  • 类的init方法执行后,是否执行
    my_gui
    root
    成为同一事物,或者
    root
    现在是
    my_gui
  • 如果它们在init函数之后本质上是相同的 执行,那么就不需要
    my\u gui
    对象了,是吗
  • self.master=master到底在做什么

  • 我想我真正想知道的是
    myu-gui
    root
    之间的关系
    root
    myu-gui
    之间的唯一关系是
    myu-gui
    使用
    root
    。否则,它们只是引用两个不同对象的两个变量

    在类的init方法执行之后,my_gui和root是一回事,还是root现在是my_gui的子集

    都不是。root不是
    myu-gui
    的子集,它只是
    myu-gui
    知道的许多事情之一。它不是
    my\u gui
    的子集,它仅由
    my\u gui
    使用

    如果它们在init函数执行后本质上是相同的,那么就不需要“my_gui”对象了,是吗

    它们本质上并不相同
    myu-gui
    MyFirstGUI
    的一个实例,
    root
    Tk
    的一个实例。它们是两个独立的东西,在这个特定的示例中,两者都是必需的

    “self.master=master”到底在做什么


    它会记住传递给它的参数,以便以后可以引用。

    my\u gui
    之间的唯一关系是
    my\u gui
    使用
    root
    。否则,它们只是引用两个不同对象的两个变量

    在类的init方法执行之后,my_gui和root是一回事,还是root现在是my_gui的子集

    都不是。root不是
    myu-gui
    的子集,它只是
    myu-gui
    知道的许多事情之一。它不是
    my\u gui
    的子集,它仅由
    my\u gui
    使用

    如果它们在init函数执行后本质上是相同的,那么就不需要“my_gui”对象了,是吗

    它们本质上并不相同
    myu-gui
    MyFirstGUI
    的一个实例,
    root
    Tk
    的一个实例。它们是两个独立的东西,在这个特定的示例中,两者都是必需的

    “self.master=master”到底在做什么

    它会记住传递给它的参数,以便以后可以引用它

    对象与指定给它的tkinter对象之间有什么区别

    我想你指的是:

    root = tk.Tk()
    my_gui = MyFirstGUI(root)
    
    这里,
    root
    并没有精确地分配给对象,而是作为对象的参数传递。然后将该参数指定为该对象的属性。就python层次结构而言,这确实意味着
    root
    现在是
    my_gui
    的子集

    my_gui
    对象使用
    root
    对象,首先将其指定为属性
    self.master
    ,然后创建小部件作为其子对象

    “如果它们在init函数执行后本质上是相同的,那么就不需要
    my_gui
    对象,是吗?”

    它们不一样,它们是唯一类的实例

    您可以将
    MyFirstGUI
    看作gui的一个构造函数类。在上述情况下,它正在为
    root
    构建,但也可以为一些(
    Toplevel
    )小部件构建
    root
    稍后可能具有:

    my_toplevel = tk.Toplevel(root)
    my_gui2 = MyFirstGUI(my_toplevel)
    
    如果删除
    master.title(…)
    行,它甚至可以为
    root
    当前拥有的
    Label
    和/或
    Button
    小部件构建,这些小部件也是
    my_gui
    的属性

    “self.master=master
    到底在做什么?”

    该行接受一个方法变量(
    master
    ),并将其作为属性分配给使用
    MyFirstGUI
    类创建的每个特定对象。然后可以在
    MyFirstGUI
    中的所有子作用域下修改/使用它(作用域及其对象
    myu gui
    )。例如,在
    \uuuu init\uuuu
    中,有一个使用以下行创建的标签:

    self.label = tk.Label(master, text="This is our first GUI!")
    
    虽然这在另一种方法下是不可能的,例如
    greet,
    如果
    self.master=master
    不存在。例如:

    def greet(self):
        print("Greetings!")
        self.label2 = tk.Label(master, text="Greetings!")
        self.label2.pack()
    
    调用
    my_gui.greet()
    将返回
    name错误:未定义名称“master”
    错误:

    def greet(self):
        print("Greetings!")
        self.label2 = tk.Label(self.master, text="Greetings!")
        self.label2.pack()
    
    再次调用
    my_gui.greet()
    会像预期的那样完美地工作

    对象与指定给它的tkinter对象之间有什么区别

    我想你指的是:

    root = tk.Tk()
    my_gui = MyFirstGUI(root)
    
    这里,
    root
    并没有精确地分配给对象,而是作为对象的参数传递。然后将该参数指定为该对象的属性。这就意味着
    root
    现在是
    my_gui
    的一个子集