如何在 Python Tkinter 中仅关闭 TopLevel window?

How to only close TopLevel window in Python Tkinter?

使用 Python Tkinter,创建一个子面板 (TopLevel) 来显示内容并获取用户输入,在用户输入后,单击 "EXIT" 找到整个 GUI(主面板)毁灭。 如何只关闭顶层 window?

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

您无法关闭 root window。当您关闭 root window 时,它会关闭所有 window。因为所有子 window 连接到根 window。

您可以隐藏 root window。

隐藏方法名称为withdraw(),可以使用deiconify()

的显示方法
# Hide/Unvisible
root.withdraw()

# Show/Visible
root.deiconify()

您唯一的错误是除了调用 top.destroy() 之外还调用了 top.quit()。您只需拨打 top.destroy()top.quit() 将杀死 mainloop,导致程序退出。

这似乎对我有用:

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

您可以将 lambda 函数与命令一起使用,它比普通函数更适合您的工作

例如)

btn = 按钮(top,text='EXIT',command=exit_btn)

exit_btn更改为lambda :top.destroy()

在我的例子中,我从父 class 传递了一个回调函数,单击提交按钮后回调函数将传递 return 值。

回调函数将调用顶层对象的 destroy 方法,这样您将关闭框架并获得 return 值。