我很容易与课程混淆。为什么他在self
这样的按钮中使用self.printButton
而self
中没有使用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()
答案 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
之外,其他任何内容都不会改变功能。