2016-01-12 143 views
1

所以我正在制作一个类似于街机游戏的程序。我想lableGuess以点击框架后出现在顶层窗口,但它给了我这个错误:Python Tkinter错误对象没有属性

AttributeError的:“窗口”对象有没有属性“窗口”

下面的代码:

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() 

回答

3

在初始化方法中初始调用guess_number可能在您按下按钮并触发new_window事件回调之前被调用。在guess_number中,您试图将self.window作为参数传递给Label(),但当时它将不确定。

+0

不是“可能” - “绝对”。它就在'__init__'中:'self.guess_number()' –

0

首先,您绝对不应该使用__init__方法创建新属性。

也就是说,Mike指出了麻烦的原因:你在new_window方法内创建了窗口对象,但没有调用它。

您必须先致电new_window,然后致电guess_number - 或者打电话给其他人。

我建议你设置windowNone,并呼吁new_window__init__方法,然后(后)调用guess_number

+0

Thanks m8!它确实有帮助! – ToucaN

相关问题