Bucky教程GUI第8部分

时间:2015-12-11 02:31:20

标签: python

我很容易与课程混淆。为什么他在self这样的按钮中使用self.printButtonself中没有使用frame

from tkinter import *

class JohnsButton:

    def __init__(self, master):
        frame = Frame(master)
        frame.pack()
        self.printButton = Button(frame, text="Print Message", command=self.printMessage)
        self.printButton.pack(side=LEFT)

        self.quitButton = Button(frame, text="Quit", command=frame.quit)
        self.quitButton.pack(side=LEFT)

    def printMessage(self):
        print("WOW, this actually worked!")


root = Tk()

b = JohnsButton(root)

root.mainloop()

1 个答案:

答案 0 :(得分:1)

frame不会被遗忘",但在 init 完成后会超出范围,因此您将无法再访问它。如果没有引用' frame',框架对象也会被销毁,但是在这种情况下,self.printButton需要它并保存对它的引用,所以它会一直存在,直到按钮被销毁,但你将无法访问它。

假设你想在方法`def f(self)'中添加另一个按钮,所以你需要再次将帧传递给Button构造函数。在这种情况下,您需要将其升级为成员变量:

self.frame = Frame(master)
self.frame.pack()
self.printButton = Button(self.frame, text="Print Message")

除了现在您可以通过JohnsButton类对象访问frame之外,其他任何内容都不会改变功能。