[Python] How do I get a tkinter toplevel window to close properly?

Discussão em 'Python' iniciado por Stack, Fevereiro 11, 2025.

  1. Stack

    Stack Membro Participativo

    Working on a script that that creates a Toplevel window with a variable amount of buttons based on a list of choices. The window has a frame-canvas-frame setup to allow for a vertical scrollbar. When one of the buttons is clicked, it sends information to the main window and I want the toplevel window to close, but using ".destroy()" leaves the window open, blank with the scrollbar. Any help pointing out my mistake is appreciated. P.S. I'm self taught and very much an amateur.

    import tkinter
    from tkinter import *
    from tkinter import ttk
    from functools import partial

    placelist = ["99999|123|FAKE ST|44|MADEUP TOWNSHIP","99999|555|NOTAREAL AVE|44|MADEUP TWP"]

    proj = tkinter.Tk()
    proj.geometry('500x500')




    def create_popup_3():
    popup3 =tkinter.Toplevel()
    popup3.geometry("500x500")
    popup3.title("Choose Result")
    main_frame = Frame(popup3)
    main_frame.grid(column=0,row=1)
    my_canvas = Canvas(main_frame)
    my_canvas.pack(side = LEFT,fill=BOTH, expand=1)
    my_scrollbar = tkinter.Scrollbar(main_frame,orient=VERTICAL,command = my_canvas.yview)
    my_scrollbar.pack(side=RIGHT, fill = Y)
    my_canvas.configure(yscrollcommand=my_scrollbar.set)
    second_frame = Frame(my_canvas,width = 400,height = 500)
    my_canvas.bind('<Configure>', lambda e: my_canvas.configure(scrollregion = my_canvas.bbox("all")))
    for option3 in placelist:
    optionsplit = option3.split('|')
    placesin = optionsplit[0].strip()
    s_num = optionsplit[1].strip()
    s_name = optionsplit[2].strip()
    twp = optionsplit[3].strip()
    twp_name = optionsplit[4].strip()
    button3 = tkinter.Button(second_frame, text= s_num + ' ' + s_name + ', ' + twp_name, command=partial(button_click_3, option3, second_frame))
    button3.pack(pady=10)
    optionwindow = my_canvas.create_window((0,0),window = second_frame, anchor = "nw")


    def button_click_3(option3, popup3):
    optionsplit = option3.split('|')
    munistrin = str(optionsplit[0]).strip()
    s_name = str(optionsplit[2]).strip()
    s_num = str(optionsplit[1]).strip()
    twp = str(optionsplit[3]).strip()
    Street_Rin.delete(0,END)
    Street_Rin.insert(0,munistrin)
    Street_Name.delete(0,END)
    Street_Name.insert(0,s_name)
    Street_Address.delete(0,END)
    Street_Address.insert(0,s_num)
    Muni_Code.delete(0,END)
    Muni_Code.insert(0,twp)
    popup3.destroy()

    sendbutton = tkinter.Button(text = ' SEND ', command = create_popup_3)
    sendbutton.pack()

    Street_Address = Entry(bd=1, width = 7, justify = LEFT, font=("Courier New", 12), textvariable="newadnum")
    Street_Address.pack()
    Street_Name = Entry(bd=1, width = 23, font=("Courier New", 12), textvariable="newstr")
    Street_Name.pack()
    Apt_No = Entry(bd=1, width = 5, font=("Courier New", 12), textvariable="newapt")
    Apt_No.pack()
    Muni_Code= Entry(bd=1, width = 5, font=("Courier New", 12), textvariable="muni")
    Muni_Code.pack()
    Street_Rin = Entry(bd=1, width = 7, justify = LEFT, font=("Courier New", 12), textvariable="rin")
    Street_Rin.pack()


    proj.mainloop()

    Continue reading...

Compartilhe esta Página