繁体   English   中英

当特定的 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 - 我将如何在单独的文件中使用它?

我假设您的其他脚本有单独的Tk()实例,它们自己的mainloop()并且不在 function 下,如果是这种情况,您可以将文件中的所有代码放在 function 下并使用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()

您还可以让 go 的功能并使这些更改更短

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()的返回

使用Toplevel是执行此操作的正确方法,您需要找出原因并纠正它。 如果你这样做了,这个问题就会自行解决。 此外,您需要从命令中删除 (),它应该是这样的:

exitBtn = Button(text="Exit", command=root.destroy)

暂无
暂无

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

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