Как закрыть только окно TopLevel в Python Tkinter? - PullRequest
0 голосов
/ 18 января 2019

Используйте Python Tkinter, создайте подпанель (TopLevel), чтобы что-то показать, и получите пользовательский ввод, после ввода пользователем нажмите «EXIT», чтобы найти весь GUI (главная панель) и назначение. Как закрыть только окно верхнего уровня?

from tkinter import *

lay=[]
root = Tk()
root.geometry('300x400+100+50')

def exit_btn():
    top = lay[0]
    top.quit()
    top.destroy()

def create():
    top = Toplevel()
    lay.append(top)

    top.title("Main Panel")
    top.geometry('500x500+100+450')
    msg = Message(top, text="Show on Sub-panel",width=100)
    msg.pack()

    btn = Button(top,text='EXIT',command=exit_btn)
    btn.pack()

Button(root, text="Click me,Create a sub-panel", command=create).pack()
mainloop()

Ответы [ 3 ]

0 голосов
/ 18 января 2019

Ваша единственная ошибка в том, что вы звоните top.quit() в дополнение к звонку top.destroy(). Вам просто нужно позвонить top.destroy(). top.quit() убьет mainloop, что приведет к выходу программы.

0 голосов
/ 18 января 2019

Мне показалось, что это работает:

from tkinter import *

lay=[]
root = Tk()
root.geometry('300x400+100+50')

def create():

    top = Toplevel()
    lay.append(top)

    top.title("Main Panel")
    top.geometry('500x500+100+450')
    msg = Message(top, text="Show on Sub-panel",width=100)
    msg.pack()

    def exit_btn():

        top.destroy()
        top.update()

    btn = Button(top,text='EXIT',command=exit_btn)
    btn.pack()


Button(root, text="Click me,Create a sub-panel", command=create).pack()
mainloop()
0 голосов
/ 18 января 2019

Вы не можете закрыть корневое окно. Когда вы закроете корневое окно, оно закроет все окно. Потому что все подокно подключено к корневому окну.

Вы можете скрыть корневое окно.

Скрыть имя метода withdraw(), вы можете использовать метод show для deiconify()

# Hide/Unvisible
root.withdraw()

# Show/Visible
root.deiconify()
...