открыть окно, которое было разрушено ранее в Tkinker - PullRequest
0 голосов
/ 27 февраля 2020

Я новичок в Tkinter и пытаюсь сделать интерфейс небольшого рандомизированного приложения. У меня есть несколько windows, и мне нужно открывать по одному, однако проблема в том, что пользователь вводит неправильные данные и ему приходится go вернуться на страницу входа, которая была уничтожена предыдущей. Пока я запускаю свой код, я получаю сообщение об ошибке ниже:

Исключение в обратном вызове Tkinter (последний последний вызов): Файл "C: \ Users \ SANDRA \ AppData \ Local \ Programs \ Python \ Python37 \ lib \ tkinter__init __. Py ", строка 1705, в call return self.fun c (* args) Файл" C: \ Users \ SANDRA \ Desktop \ python work \ GUI \ stem page 1.py ", строка 31, в файле проверки open_login ()" C: \ Users \ SANDRA \ Desktop \ python работа \ GUI \ stem page 1.py ", строка 35, в open_login root .destroy () Файл "C: \ Users \ SANDRA \ AppData \ Local \ Programs \ Python \ Python37 \ lib \ tkinter__init __. Py", строка 2062, в файле destroy self.tk.call ("уничтожить", self ._w) _tkinter.TclError: не может вызвать команду «уничтожить»: приложение было уничтожено

ниже мой код до сих пор:

from tkinter import *

    #creating the admin's logged in page
    def admin_logged_in():
        #global adn_logged_in

        adn_logged_in = Tk()
        adn_logged_in.title("Administrative page")
        adn_logged_in.config(bg = "#ffe6ff")
        adn_logged_in.geometry("700x400")
        adn_logged_in.resizable(width=FALSE, height=FALSE)
        adn_lbl = Label(adn_logged_in, text ="please select what you wish to do.", font = "Arial 16",fg = "black", bg = "#ffe6ff", pady = 50)
        adn_lbl.pack()
        list = Listbox(adn_logged_in,selectmode = SINGLE, height = 2,bg = "#ffe6ff", width = 30, font = "Arial 16" ,fg = "blue")
        list.insert(1, "Add students")
        list.insert(2, "Delete students")
        list.pack()

        adn_logged_in.mainloop()

    #creating a function to validate the username and password
    def validation():
        username_text = username.get()
        password_text = password.get()
        if username_text == "admin" and password_text == "123":
            admin.destroy()
            admin_logged_in()

        else: 
            open_login()

    #creating a function to open the administrator window
    def open_login():
        root.destroy()
        global password
        global username
        global admin
        admin = Tk()#creates a new window
        admin.title("Administrative login page")
        admin.config(bg = "#ffe6ff")
        admin.geometry("700x400")
        admin.resizable(width=FALSE, height=FALSE)

        label1 = Label(admin,text = " please login", font = "Arial 40",fg = "blue", bg = "#ffe6ff", pady = 40)
        label1.pack()
        open_frame = Frame(admin, bg = "#ffe6ff")
        open_frame.pack()

    #crating label and entry for user name .
        name_lbl = Label(open_frame, text = "Username: ",font = "Arial 16", fg = "black",bg = "#ffe6ff",)
        name_lbl.grid(row = 0, column = 0, sticky = "e")
        username = StringVar()
        name_entry = Entry(open_frame, textvariable = username, width = 50)
        name_entry.grid(row = 0, column = 1, sticky = "w", pady =8)

    #creating label and entry for password
        pw_lbl = Label(open_frame, text = "Password: ",font = "Arial 16", fg = "black", bg = "#ffe6ff",)
        pw_lbl.grid(row = 1, column = 0, sticky = "e")
        password = StringVar()
        pw_entry = Entry(open_frame, textvariable = password,width = 50, show = "*")
        pw_entry.grid(row = 1, column = 1, sticky = "w",pady = 8)
    #creating a submit button
        sub_btn = Button(open_frame, text = "Submit",font = "Arial 16", fg = "black", bg = "#ffe6ff", width = 20,command= validation)
        sub_btn.grid(row = 3, column = 1, sticky = "s")

        admin.mainloop()

    #creating the main window
    root = Tk()
    root.title("Student Randomiser v 1.0")
    root.config(bg = "#ffe6ff")
    root.geometry("700x400")
    root.resizable(width=FALSE, height=FALSE)

    #creating the frame1 for the first window
    frame1 = Frame(relief = FLAT, borderwidth = 3, bg ="#ffe6ff")
    frame1.pack()
    #creating the heading
    main_lbl = Label(frame1, text = "STUDENT RANDOMISER",bg = "#ffe6ff",fg = "blue", font = "Helvetica 40 bold")
    main_lbl.pack(side = TOP, pady= 40)

    #creating the welcome note
    welcome_lbl = Label(frame1,font = "Arial 18", text = "Welcome to our student randomising sytem ",bg = "#ffe6ff",fg = "black")
    welcome_lbl.pack()

    #creatinf empty frame for spacing
    empty_frame = Frame(height = 40)
    empty_frame.pack()
    #creating a frame for the buttons
    frame2 = Frame(relief = FLAT,borderwidth = 3, bg ="#ffe6ff")
    frame2.pack()
    #creating a adminstrator button
    adm_button = Button(frame2, font = "Arial 16",text = "Adminstrator", fg = "black", width = 20, command =open_login)
    adm_button.pack(side = LEFT, padx = 15, pady = 5)

    #creating user button
    user_button = Button(frame2, font = "Arial 16", text = "User", fg = "black", width = 20)
    user_button.pack(side = RIGHT, padx = 15, pady = 5)


    root.mainloop()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...