【问题标题】:tkinter help: difference between "master" and "root" keywords in this code?tkinter 帮助:此代码中“master”和“root”关键字之间的区别?
【发布时间】:2023-03-20 04:00:01
【问题描述】:

我正在学习 Tkinter 并尝试理解 OOP 概念。我在网上看到了这段代码:

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”有什么区别?代码中的“主”关键字的用途是什么?据我了解,'self' 类似于 Java 中的 'this' 关键字,所以我假设 self 和 master 不一样?

提前感谢您的帮助!如果我问的不够清楚,请道歉。

【问题讨论】:

  • master 和 root 都不是关键字。它们只是某人选择的变量。它们可以是任何不同的东西。 self 也是类似的,但它是一个非常强大的约定。

标签: python tkinter


【解决方案1】:

我认为你称它为“master”或“root”没有任何区别。人们称它为“根”,因为 Tkinter 小部件被放置在树中,因此其中一部分将是“根”。人们会称它为“主人”,因为所有小部件都有他们去的父母或主人。所以你可以称之为任何东西。我希望这个答案有帮助

【讨论】:

    【解决方案2】:

    master 和root 不是关键字,它们是元语法变量,对编译器没有任何特殊意义。这段代码也可以正常工作:

    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() 
    

    希望这会有所帮助!

    【讨论】:

    • 哦哈哈,有道理!所以在你的情况下,“鸡”是指父窗口吗?它只是一种确保代码知道您希望将按钮或标签放置在哪个窗口中的方法吗?
    • 是的。 stackoverflow 是新的 Tkinter 窗口,它使用参数 chickens 传递给 MyFirstGUI 类。你是正确的,变量正在被使用,所以 Tkinter 知道把东西放在哪里。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-07-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多