TypeError: 'Toplevel' object is not callable - Does anyone know why this happens?

531 Views Asked by At

So over here I am trying to make a little python-tkinter program which will store your passwords of your apps in files. However, when I try to make the second screen open, I get this error:

TypeError: 'Toplevel' object is not callable

Here is the code:

from tkinter import *
from tkinter import messagebox
import os

def screen2():
    global screen2
    screen2 = Toplevel(root)
    screen2.title("Main Page")
    screen2.geometry("260x230")
    screen2.resizable("False","False")

    Label(screen2, text="hello").pack()


def check_code():
    code_requestget = code_request.get()
    print(code_requestget)
    if code_requestget == code:
        screen2()
    else:
        messagebox.showwarning("Error", "Code is incorrect")


def mainscreen():
    global root
    global code
    global code_request
    code = "1234"
    root = Tk()
    root.title("Passwords")
    root.geometry("260x230")
    root.resizable("False","False")
    code_request = StringVar()

    label1 = Label(root, text="Welcome - Enter Code", width="40", height="3", background="SpringGreen3")
    label1.pack()
    Label(text="").pack()

    enter_code = Entry(root, width="20", textvariable=code_request)
    enter_code.pack()
    Label(text="").pack()

    continue_button = Button(root, text="Continue", width="16", command=check_code)
    continue_button.pack()



    root.mainloop()

mainscreen()
1

There are 1 best solutions below

0
On

Unrelated to your question, but seeing your window names makes me think you don't want to use Toplevel at all. That's only needed when you want 2 active windows, but I suspect you want to use one window just to check the password, then close it and open a second, "main" window, right? If so you need to reconfigure the root window instead of using Toplevel to open a new window. Like this:

from tkinter import *
from tkinter import messagebox
import os

def screen2():
    frame1.destroy() # remove all the pw check stuff
    root.title("Main Page") # rename window

    Label(root, text="hello").pack()

def check_code():
    code_requestget = code_request.get()
    print(code_requestget)
    if code_requestget == code:
        screen2()
    else:
        messagebox.showwarning("Error", "Code is incorrect")

def mainscreen():
    global root, code, code_request, frame1
    code = "1234"
    root = Tk()
    root.title("Passwords")
        root.geometry("260x230")
        root.resizable("False","False")
        frame1 = Frame(root) # create a Frame to hold pw check components
        frame1.pack()

        code_request = StringVar()

        label1 = Label(frame1, text="Welcome - Enter Code", width="40", height="3", background="SpringGreen3")
        label1.pack()
        Label(frame1, text="").pack()

        enter_code = Entry(frame1, width="20", textvariable=code_request)
        enter_code.pack()
        Label(frame1, text="").pack()

        continue_button = Button(frame1, text="Continue", width="16", command=check_code)
        continue_button.pack()

        root.mainloop()

    mainscreen()