【问题标题】:What does frame.__init__ do? - tkinterframe.__init__ 做什么? - tkinter
【发布时间】:2018-08-06 16:02:01
【问题描述】:

我在看 Sentdex 的 Tkinter 教程,出现了一些相关的问题:

  1. 我刚接触的基本类问题:Frame 怎么会跟在 Window 类的声明之后(抱歉,这是一个基本类问题)? self.pack 没有它是如何工作的?指定要打包什么?
  2. frame.__init__ 对此代码有何贡献?

代码是这样的:

from tkinter import *

class Window(Frame):

    def __init__(self, master=None):
        Frame.__init__(self, master, bg='LightBlue')

        self.master = master

        self.init_window()

    def init_window(self):
        self.master.title("GUI")
        self.master.geometry('400x400')

        self.pack(fill=BOTH, expand=1)

        quitButton = Button(self, text='Quit')
        quitButton.place(x=0, y=0)


root = Tk()

app = Window(root)

root.mainloop()     

提前致谢!

【问题讨论】:

    标签: python python-3.x class oop tkinter


    【解决方案1】:

    class Window继承自tk.Frame,这就是(Frame)Window之后的意思。
    在这种情况下,Window 也是一个tk.Frame,因此当在self 上调用pack() 时,它本质上是在包装自己。

    避免星号导入可能会更容易混淆:

    import tkinter as tk
    
    
    class Window(tk.Frame):                           # <-- avoid star imports
    
        def __init__(self, master=None):
            self.master = master
            super().__init__(master, bg='LightBlue')  # <-- use super instead of hardcoding the parent class
    
            self.init_window()
    
        def init_window(self):
            self.master.title("GUI")
            self.master.geometry('400x400')
            self.pack(fill=tk.BOTH, expand=True)
    
            self.quit_button = tk.Button(self, text='Quit', 
                                         command=self.master.destroy)
            self.quit_button.pack()
    
    
    if __name__ == '__main__':
    
        root = tk.Tk()
        app = Window(root)
        root.mainloop()
    

    【讨论】:

      【解决方案2】:

      Frame 放在括号中,以便类 Window 可以继承 tkinter.Frame 类的方法。 Frame.init 函数将类初始化为 tkinter Frame。 self.pack() 行将 Frame 打包到之前几行创建的 self.master 中。

      查看一些基本类并从那里开始构建。

      我不久前做了这个教程,发现我必须先花一点时间看一下课程。我使用了一些我认为的 youtube 视频,祝你好运!

      【讨论】:

      • Frame 没有“传递给班级”。正确的术语是该类从Frame继承
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-11-26
      • 2016-05-28
      • 1970-01-01
      • 1970-01-01
      • 2010-10-12
      • 2019-04-21
      相关资源
      最近更新 更多