我是tkinter的新手,似乎无法绕过oop,我认为这就是问题所在。
这是我的代码:
from Tkinter import *
from PIL import ImageTk, Image
images = {
"first" : "miog.png",
"combat" : "mio kicking ass.jpg"
}
class App:
def __init__(self, master, image_dict):
frame = Frame(master)
frame.pack()
self.pic = ImageTk.PhotoImage(Image.open(image_dict["first"]))
self.image = Label(frame, image = self.pic)
self.image.pack(side = TOP)
self.button = Button(frame, text="Start", command=self.combat())
self.button.pack(side = RIGHT)
def combat(self):
self.button.destroy()
window = Tk()
window.title("aaa")
app = App(window, images)
window.mainloop()
我从控制台得到的错误是:
AttributeError: App instance has no attribute 'button'
我没有得到它,初始化实例时没有按钮(在 init 中)?
我发现类似问题的每个其他答案都与缩进有关,但我确保仔细检查所有内容(所有标签以及我认为它们应该在哪里)。
答案 0 :(得分:0)
您需要将 callable 传递给按钮实例,而不是结果。
self.button = Button(frame, text="Start", command=self.combat)
否则你立即调用它,所以在实际定义按钮之前执行它。