繁体   English   中英

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

[英]How to only close TopLevel window in Python Tkinter?

使用 Python Tkinter ,创建一个子面板(TopLevel)来显示内容并获取用户输入,用户输入后,单击“退出”,发现整个 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()

这似乎对我有用:

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

你唯一的错误是,你打电话top.quit()除了调用top.destroy() 你只需要调用top.destroy() top.quit()将杀死mainloop ,导致程序退出。

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

您可以隐藏根窗口。

隐藏方法名是withdraw()deiconify()可以使用show方法

# Hide/Unvisible
root.withdraw()

# Show/Visible
root.deiconify()

您可以将 lambda 函数与命令一起使用,它比正常的工作函数更好

前任)

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

exit_btn更改为lambda :top.destroy()

在我的例子中,我从父类传递了一个回调函数,一旦点击提交按钮,回调函数就会传递返回值。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM