问题
So I am making a program similar to the arcade games. I want the lableGuess to appear in the toplevel window after clicking the frame but it gives me this error:
AttributeError: 'Window' object has no attribute 'window'
Here's the code:
from tkinter import *
from tkinter import font
import time
class Window(Frame):
def __init__(self, master):
Frame.__init__(self, master)
self.master = master
master.title("Arcade Games")
master.geometry("800x600+560+240")
b = Button(self, text="Guess the number", command=self.new_window)
b.pack(side="top")
self.customFont = font.Font(master, font="Heraldica", size=12)
self.guess_number()
def new_window(self):
id = "Welcome to the 'Guess your number' game!\nAll you need to do is follow the steps\nand I will guess your number!\n\nClick anywhere to start!"
self.window = Toplevel(self.master)
frame = Frame(self.window)
frame.bind("<Button-1>", self.guess_number)
frame.pack()
self.window.title("Guess the number")
self.window.geometry("400x300+710+390")
label = Label(self.window, text=id, font=self.customFont)
label.pack(side="top", fill="both", padx=20, pady=20)
def guess_number(self):
labelGuess = Label(self.window, text="Pick a number between 1 and 10", font=self.customFont)
time.sleep(2)
labelGuess.pack(fill=BOTH, padx=20, pady=20)
if __name__ == "__main__":
root = Tk()
view = Window(root)
view.pack(side="top", fill="both", expand=True)
root.mainloop()
回答1:
Your initial call to guess_number
in your initializer method is probably being invoked before you press the button and trigger the new_window
event callback. In guess_number
you're trying to pass self.window
as an argument to Label()
but it would be undefined at that time.
回答2:
First at all, you should never create a new attribute out of the __init__
method.
That said, Mike pointed the trouble’s reason: you created the window object inside the new_window
method, but did not called it.
You must call new_window
before call guess_number
– or call one inside other.
I suggest that you set window
to None
and call new_window
inside __init__
method, then (after that) call guess_number
.
来源:https://stackoverflow.com/questions/34750190/python-tkinter-error-object-has-no-attribute