[英]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.