tkinter帮助:在这段代码中,“master”和“root”关键词有什么区别?

3

我正在学习Tkinter并尝试理解面向对象编程的概念。我在网上找到了这段代码:

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

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

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

        self.close_button = Button(master, text="Close", command=master.quit)
        self.close_button.pack()

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

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

这段代码之前运行得很好,我也理解了小部件的特性以及它们的作用。但是,我稍微编辑了一下代码,如下所示:

class Timer:

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

        self.label = Label(master, text="first GUI")
        self.label.pack()

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

        self.close_button = Button(master, text="Close", command=master.quit)
        self.close_button.pack()

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

master = Tk()
my_gui = Timer(master)
master.mainloop()

令我惊讶的是,这段代码也完美地运行了。我的问题是,使用“master”而不是“root”的区别是什么?在代码中,“master”关键字的目的是什么?据我所知,“self”类似于Java中的“this”关键字,因此我假设self和master不同?感谢各位的帮助!如果我表达不够清晰,请见谅。

2
masterroot都不是关键字。它们只是某人选择的变量。它们可以是任何不同的东西。另外,self也是类似的,但它是一个非常强的约定。 - quamrana
2个回答

3

masterroot 不是关键字,它们是元语法变量,在编译器中没有特殊含义。以下代码同样可以正常工作:

class MyFirstGUI:
    def __init__(self, chickens):
        self.chickens = chickens
        chickens.title("A simple GUI")

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

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

        self.close_button = Button(chickens, text="Close", command=chickens.quit)
        self.close_button.pack()

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

stackoverflow = Tk()
my_gui = MyFirstGUI(stackoverflow)
stackoverflow.mainloop() 

希望这能帮到你!


哦哈哈,这很有道理!那么在你的情况下,'chickens'是指父窗口吗?这只是一种确保代码知道你想要将按钮或标签放置在哪个窗口的方式吗? - bailslearnsstuff
是的。stackoverflow 是新的 Tkinter 窗口,并且它被传递给 MyFirstGUI 类,使用参数 chickens。而且你是正确的,这个变量被使用,所以 Tkinter 知道在哪里放置东西。 - Mr. Brainfart

1
我认为将其称为“主”或“根”没有任何区别。人们称之为“根”,因为Tkinter小部件被放置在树中,所以其中的一部分就是“根”。人们称之为“主”是因为所有小部件都有一个父级或主控。所以你可以随便称呼它。希望这能帮到你。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接