3

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

2 Answers 2

4

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.

Sign up to request clarification or add additional context in comments.

1 Comment

not "probably" -- "definitely". It's right there in the __init__: self.guess_number()
0

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.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.