所以我正在制作类似于街机游戏的程序。我希望lableGuess在单击框架后出现在顶层窗口中,但它给了我这个错误:
AttributeError:'Window'对象没有属性'window'
以下是代码:
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()
答案 0 :(得分:4)
在按下按钮并触发guess_number
事件回调之前,可能正在调用初始化方法中对new_window
的初始调用。在guess_number
中,您尝试将self.window
作为参数传递给Label()
但当时未定义。
答案 1 :(得分:0)
首先,您永远不应该使用__init__
方法创建新属性。
那就是说,Mike指出了麻烦的原因:你在new_window
方法中创建了窗口对象,但没有调用它。
您必须在致电new_window
之前致电guess_number
- 或致电其他人。
我建议您将window
设置为None
并在new_window
方法中调用__init__
,然后(之后)调用guess_number
。