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
my_gui
和
root
成为同一事物,或者root
现在是
my_gui
my\u gui
对象了,是吗我想我真正想知道的是
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
的一个子集