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

时间:2019-01-17 22:11:59

标签: python user-interface tkinter tk

使用Python Tkinter,创建一个子面板(TopLevel)来显示某些内容并获取用户输入,在用户输入后,单击“退出”,发现整个GUI(主面板)也很混乱。 如何仅关闭顶层窗口?

let array =  [
    {id: 1},
    {id: 2, parentId: 1},
    {id: 3, parentId: 2},
    {id: 4, parentId: 3},
    {id: 5, parentId: 2},
    {id: 6, parentId: 1},
   ...
    {id: 100, parentId: 90}
    ]

5 个答案:

答案 0 :(得分:1)

您唯一的错误是您除了呼叫top.quit()外,还呼叫top.destroy()。您只需要致电top.destroy()top.quit()将杀死mainloop,导致程序退出。

答案 1 :(得分:1)

这似乎对我有用:

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

答案 2 :(得分:0)

您无法关闭根窗口。当您关闭根窗口时,它将关闭所有窗口。因为所有子窗口都连接到根窗口。

您可以隐藏根窗口。

隐藏方法名称为withdraw(),您可以将show方法用于deiconify()

# Hide/Unvisible
root.withdraw()

# Show/Visible
root.deiconify()

答案 3 :(得分:0)

您可以在命令中使用lambda函数,该命令比正常工作要好

ex)

btn = Button(top,text ='EXIT',command = exit_btn

exit_btn 更改为lambda :top.destroy()

答案 4 :(得分:0)

对于我来说,我从父类传递了一个回调函数,一旦单击了提交按钮,它将使回调函数传递返回值。

回调函数将在顶级对象上调用destroy方法,这样,您将关闭框架并获得返回值。