Python 以Tkinter为例的关于课堂的基本问题

Python 以Tkinter为例的关于课堂的基本问题,python,class,tkinter,frame,init,Python,Class,Tkinter,Frame,Init,我在这里遵循教程示例: 我稍微修改了源代码(基本上是导入Tkinter,而不是从Tkinter导入*) 我意识到,如果我从Tkinter.Frame.\uuu init\uuuuu(self,master)中取出master,代码仍然会运行,不仅如此,我还可以运行app=Application(root)并创建多个三重按钮 所以我的问题是: “大师”到底是干什么的 如果我从\uuuu init\uuuu(self,master)中取出master,它将给出一个关于没有足够参数的错误 另外,我不需

我在这里遵循教程示例:

我稍微修改了源代码(基本上是导入Tkinter,而不是从Tkinter导入*)

我意识到,如果我从
Tkinter.Frame.\uuu init\uuuuu(self,master)
中取出
master
,代码仍然会运行,不仅如此,我还可以运行
app=Application(root)
并创建多个三重按钮

所以我的问题是:

  • “大师”到底是干什么的

  • 如果我从
    \uuuu init\uuuu(self,master)
    中取出master,它将给出一个关于没有足够参数的错误

  • 另外,我不需要使用
    app=Application(root)
    ,我只需要运行
    Application(root)
    ,这仍然使
    root.mainloop()
    工作,那么
    app=Application(root)
    的目的是什么呢


  • 感谢您按顺序回答您的问题

  • master
    参数是每个小部件的“父小部件”,对于
    Tkinter.Frame
    ,默认为
    None
    。注意:您将
    self
    (即
    框架
    )作为
    master
    传递给每个
    按钮

  • 这不是一个真正的问题,但是如果您将定义更改为
    def\uuu init\uuuu(self)
    ,然后调用
    app=Application(root)
    ,您将得到一个
    TypeError
    ,因为
    root
    参数无处可去;及

  • 设置
    app=Application(root)
    的要点很简单,您可以稍后访问它。您的示例很简单,没有可在
    \uuuu init\uuu
    之外调用的实例方法,但情况可能并非总是如此

  • 为了澄清1,请注意

    class Application(Tkinter.Frame):
    
    表示所有
    应用程序
    类实例都从
    Tkinter.Frame
    继承方法和属性。这与例如中的函数参数不同

    def __init__(self, master):
    
    这意味着
    Application.\uuuu init\uuu
    接受两个参数(第一个参数在所有实例方法中按约定称为
    self
    ,是类实例本身,通常隐式传递)。当你打电话的时候

    app = Application(root)
    
    这与
    \uuuu init\uuuu
    定义有关,并且(大致)是指


    如果
    \uuuu init\uuuu
    没有两个参数(
    self
    master
    ),您将因此得到一个
    TypeError
    ,因为有两个参数(隐式实例
    self
    和显式父窗口小部件
    master
    ),Python只知道如何处理其中一个参数

    你能解释一下应用程序(root)吗,我的意思是,这个类被定义为类应用程序(Tkinter.Frame),它已经接受了参数“Tkinter.Frame”,将root传递给它对我来说没有什么意义。还有,你所说的根参数无处可去是什么意思?谢谢,谢谢你jonrsharpe,我仍然很困惑,但我想我对类和面向对象编程更困惑,我将不得不查看更多的教程,然后再回到这里。谢谢你的解释。
    app = Application(root)
    
    Application.__init__(app, root)