一个对象与分配给它的tkinter对象有什么区别?

约翰·冯·阿登

我正在尝试使用OOP方法来理解程序,但这似乎并不理想。

我可以遵循下面的代码(在网上找到),但是我对之间的关系rootmy_gui有疑问(位于类定义下面)。

import tkinter as tk

class MyFirstGUI:

    def __init__(self, master):
        self.master = master
        master.title("A simple GUI")

        self.label = tk.Label(master, text="This is our first GUI!")
        self.label.pack()

        self.greet_button = tk.Button(master, text="Greet", command=self.greet)
        self.greet_button.pack()

    def greet(self):
        print("Greetings!")

root = tk.Tk()
my_gui = MyFirstGUI(root)
root.mainloop()

我知道init方法中的label和button对象每个都进入主对象(这是根对象),但是令我困惑的是区分my_guiroot执行了init方法之后。

  1. 该类执行的init方法后,就my_guiroot成为一个,同样的事情,或者是root现在的一个子集my_gui
  2. 如果它们在init函数执行后基本相同,那么就不需要该my_gui对象了吗?
  3. 到底在self.master = master做什么?

我想我真正想知道的是关系my_guiroot

e

“对象与分配给它的tkinter对象之间有什么区别?”

我认为您是指该部分:

root = tk.Tk()
my_gui = MyFirstGUI(root)

root是不完全分配给一个对象,而是被作为参数传递对象。然后,将该参数分配为该对象属性等于说root现在一个子集,my_gui只要蟒蛇层次而言。

my_guiobject首先使用root对象self.master,然后将其分配为属性,然后再将其作为其子代创建小部件。

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

他们是一样的,它们是唯一的类的实例。

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

my_toplevel = tk.Toplevel(root)
my_gui2 = MyFirstGUI(my_toplevel)

它甚至可以为当前具有的窗口小部件Label和/或当前具有的Button窗口小部件构造,如果删除了该行root,它们也属于属性my_guimaster.title(...)

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

该行使用方法变量(master),并将其作为属性分配给使用MyFirstGUIclass创建的每个特定对象它是然后可用于修改/下使用中的所有子范围的MyFirstGUI(并且在该范围的目的,my_gui是可用的)。其用法的一个示例__init__是在中使用该行创建一个标签:

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()会返回NameError: name 'master' is not defined错误:

def greet(self):
    print("Greetings!")
    self.label2 = tk.Label(self.master, text="Greetings!")
    self.label2.pack()

然后再次拨打电话即可my_gui.greet()按预期效果完美运行。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

将对象分配给属性或分配给属性之间有什么区别?

如何在reactjs中将一个对象的属性分配给它的另一个属性?

Java,将null分配给对象和just声明有什么区别

为什么指向同一个对象的两个对象实例中的一个在将 NULL 分配给它们中的任何一个时表现不同?

为什么将对象分配给地图会产生一个空对象?

为什么侦听器没有绑定到我分配给它的对象?

为什么循环将最后一个索引元素的引用分配给它?

为什么更新一个变量也会更新分配给它的变量?

可以将一个对象分配给另一个具有不同类型的对象

为什么我可以将require的结果分配给一个对象?

仅将变量内联到另一个表达式中,将表达式分配给变量VS有什么区别?

在Java中将一个对象分配给另一个对象

将一个对象分配给另一个对象Javascript

有没有办法更改分配给另一个对象的属性的对象的属性?

在将对象分配给另一个对象时查询对象的地址

如何将现有文件对象分配给另一个文件对象

无法将对象的属性重新分配给另一个现有对象

SwiftUI 代码将一个对象数据分配给数组中的所有其他对象?

解构对象并分配给一行中的另一个对象

在声明对象时将对象属性值分配给另一个属性

将NSData对象分配给另一个NSData对象的逻辑

过滤数组中的对象并将其分配给另一个对象

随机类-将对象分配给另一个对象

在将对象分配给另一个对象之前检查是否相等

对象的好处分配给Java中的另一个对象

在C#中将不同的对象分配给一个对象

如何访问分配给另一个对象的属性的数组内的对象的属性?

有没有办法判断一个数据集或对象是否被分配给另一个对象的变量?

将一个对象分配给同一类的另一个对象