Python 为什么Toplevel显示两个窗口?

Python 为什么Toplevel显示两个窗口?,python,tkinter,toplevel,Python,Tkinter,Toplevel,我正在尝试制作一个tkinter应用程序,当第一个窗口根关闭时,它不会关闭所有其他窗口。我曾尝试使用Toplevel,它可以完美地用于其他程序中的弹出窗口,但不能用于制作基本级别 from tkinter import * top = Toplevel(bg='red') top.mainloop() 我不知道这是否可行,或者我不知道是否可以更改Tk的属性使其不关闭所有其他窗口。会显示两个窗口,因为当创建tkinter小部件时,它会强制创建Tk实例,并且每个小部件,除非显式传递父窗口,是自

我正在尝试制作一个tkinter应用程序,当第一个窗口根关闭时,它不会关闭所有其他窗口。我曾尝试使用Toplevel,它可以完美地用于其他程序中的弹出窗口,但不能用于制作基本级别

from tkinter import *

top = Toplevel(bg='red')

top.mainloop()

我不知道这是否可行,或者我不知道是否可以更改Tk的属性使其不关闭所有其他窗口。

会显示两个窗口,因为当创建tkinter小部件时,它会强制创建Tk实例,并且每个小部件,除非显式传递父窗口,是自动创建的Tk实例的子对象。因此,您的代码基本上模仿了以下代码:

from tkinter import *

root = Tk()

top = Toplevel(root, bg='red')

root.mainloop()
现在有一些方法可以解决您想要的行为,一种是隐藏实际的Tk实例:

import tkinter as tk

root = tk.Tk()
root.withdraw()

top = tk.Toplevel(root, bg='red')

#to display root window again
#root.iconify()
#root.deiconify()
root.mainloop()
另一种方法是否决删除根本身,但我怀疑这实际上是您想要的:

import tkinter as tk


def callback():
    print("Won't close")

root = tk.Tk()

root.protocol("WM_DELETE_WINDOW", callback)

root.mainloop()

您不使用Toplevel作为仅根Tk。Toplevel不是根,但始终是根窗口Tk的“对话框”。要创建主窗口,请使用Tk。Toplevel用于创建第二个窗口子窗口/对话框/消息框/等。您只需拥有一个根窗口即可。如果你不创建一个,tkinter会为你创建一个。撤回根目录可以正常工作,非常感谢