当特定 window 关闭时,如何关闭所有 Tkinter windows?
How do you close all Tkinter windows when specific window closes?
我在 Python Tkinter 中有这个应用程序。有一个 Python 文件,它是一个主菜单。当我单击主菜单中的一个选项时,它会导入一个 python 文件,其中包含创建新 window 的代码(由于某些原因无法将 Toplevel
用于新的 window ).所以当我关闭主菜单时,它应该关闭所有其他 windows.
这是我的主菜单代码:
from tkinter import *
root = Tk()
root.geometry("600x600")
def newWindowImport():
import file1
def newWindowImport2():
import file2
newWindow = Button(text="new window", command=newWindowImport).pack()
newWindow2 = Button(text="new window", command=newWindowImport2).pack()
# Here is there a way so that when I exit it destroys the Main Menu as well as the opened windows
exitBtn = Button(text="Exit", command=root.destroy())
root.mainloop()
我尝试了 root.destroy
方法,但它只破坏了主菜单而不是所有 windows。有没有办法让当我退出主菜单时,它会破坏主菜单以及打开的 windows?如果我要使用 Toplevel
- 我将如何在单独的文件中使用它?
使用 Toplevel
是执行此操作的正确方法,您需要找出不起作用的原因并进行更正。如果你这样做了,这个问题就会自行解决。另外,您需要从命令中删除 () ,它应该是这样的:
exitBtn = Button(text="Exit", command=root.destroy)
我假设你的其他脚本有单独的 Tk()
实例,它们自己的 mainloop()
并且不在一个函数下,如果是这样的话,你可以在你的函数下的文件并使用 Toplevel()
,例如,file1
应该类似于
def something():
window=Toplevel()
#Rest of the code
类似地file2
,之后在你的主程序中你可以做这样的事情
from tkinter import *
import file1, file2
root = Tk()
root.geometry("600x600")
def newWindowImport():
file1.something()
def newWindowImport2():
file2.something()
newWindow = Button(text="new window", command=newWindowImport)
newWindow.pack()
newWindow2 = Button(text="new window", command=newWindowImport2)
newWindow2.pack()
# Here is there a way so that when I exit it destroys the Main Menu as well as the opened windows
exitBtn = Button(text="Exit", command=root.destroy)
root.mainloop()
您也可以放弃这些功能并进行这些更改以使其更短
newWindow = Button(text="new window", command=file1.something)
newWindow.pack()
newWindow2 = Button(text="new window", command=file2.something)
newWindow2.pack()
您的方法不起作用的原因是每个文件都有自己的 mainloop()
,因此当您在主代码中调用 root.destroy
时它们无法被销毁。
另请注意,我已经从 command=root.destroy
中删除了括号 ()
,否则它将在程序初始化时立即调用。
编辑: 正如@martineau 在评论中所建议的那样,最好在 Button
实例上单独使用 .pack()
,因为它提供了更大的灵活性稍后在程序中使用实例,而不是让它们保存值 None
,即来自 .pack()
的 return
我在 Python Tkinter 中有这个应用程序。有一个 Python 文件,它是一个主菜单。当我单击主菜单中的一个选项时,它会导入一个 python 文件,其中包含创建新 window 的代码(由于某些原因无法将 Toplevel
用于新的 window ).所以当我关闭主菜单时,它应该关闭所有其他 windows.
这是我的主菜单代码:
from tkinter import *
root = Tk()
root.geometry("600x600")
def newWindowImport():
import file1
def newWindowImport2():
import file2
newWindow = Button(text="new window", command=newWindowImport).pack()
newWindow2 = Button(text="new window", command=newWindowImport2).pack()
# Here is there a way so that when I exit it destroys the Main Menu as well as the opened windows
exitBtn = Button(text="Exit", command=root.destroy())
root.mainloop()
我尝试了 root.destroy
方法,但它只破坏了主菜单而不是所有 windows。有没有办法让当我退出主菜单时,它会破坏主菜单以及打开的 windows?如果我要使用 Toplevel
- 我将如何在单独的文件中使用它?
使用 Toplevel
是执行此操作的正确方法,您需要找出不起作用的原因并进行更正。如果你这样做了,这个问题就会自行解决。另外,您需要从命令中删除 () ,它应该是这样的:
exitBtn = Button(text="Exit", command=root.destroy)
我假设你的其他脚本有单独的 Tk()
实例,它们自己的 mainloop()
并且不在一个函数下,如果是这样的话,你可以在你的函数下的文件并使用 Toplevel()
,例如,file1
应该类似于
def something():
window=Toplevel()
#Rest of the code
类似地file2
,之后在你的主程序中你可以做这样的事情
from tkinter import *
import file1, file2
root = Tk()
root.geometry("600x600")
def newWindowImport():
file1.something()
def newWindowImport2():
file2.something()
newWindow = Button(text="new window", command=newWindowImport)
newWindow.pack()
newWindow2 = Button(text="new window", command=newWindowImport2)
newWindow2.pack()
# Here is there a way so that when I exit it destroys the Main Menu as well as the opened windows
exitBtn = Button(text="Exit", command=root.destroy)
root.mainloop()
您也可以放弃这些功能并进行这些更改以使其更短
newWindow = Button(text="new window", command=file1.something)
newWindow.pack()
newWindow2 = Button(text="new window", command=file2.something)
newWindow2.pack()
您的方法不起作用的原因是每个文件都有自己的 mainloop()
,因此当您在主代码中调用 root.destroy
时它们无法被销毁。
另请注意,我已经从 command=root.destroy
中删除了括号 ()
,否则它将在程序初始化时立即调用。
编辑: 正如@martineau 在评论中所建议的那样,最好在 Button
实例上单独使用 .pack()
,因为它提供了更大的灵活性稍后在程序中使用实例,而不是让它们保存值 None
,即来自 .pack()