如何在 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 值。
使用 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 值。