如何在Python Tkinter中仅关闭顶层窗口?

9
使用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()

5个回答

12

这对我似乎有效:

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

1
为什么要调用update函数? - user32882

9
你唯一的错误是除了调用top.destroy()之外还调用了top.quit()。你只需要调用top.destroy()即可。调用top.quit()会杀死mainloop,使程序退出。

2

您不能关闭根窗口。当您关闭根窗口时,所有窗口都会关闭。因为所有子窗口都连接到根窗口。

您可以隐藏根窗口。

隐藏方法名为withdraw(),您可以使用deiconify()方法进行显示。

# Hide/Unvisible
root.withdraw()

# Show/Visible
root.deiconify()

非常感谢您分享解决方案,我可以在另一个案例中使用它。 - baliao

0
在我的情况下,我从父类传递了一个回调函数,一旦提交按钮被点击,它将调用回调函数并传递返回值。
回调函数将在顶层对象上调用destroy方法,这样你就可以关闭框架并获得返回值。

0

你可以使用lambda函数来代替普通函数,这样更适合你的工作。

例如:

btn = Button(top,text='退出',command=exit_btn)

exit_btn改为lambda :top.destroy()


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接