关闭第一个顶级后尝试在 Tkinter 中创建第二个顶级时,出现错误:
_tkinter。Tcl错误:错误的窗口路径名".!顶层
该错误仅在第一个顶级关闭时发生,当我在没有close_window()
的情况下运行代码时,没有发生错误并且new_window
工作并创建第二个顶级。我需要能够关闭第一个顶级,但不确定这里出了什么问题,所以非常感谢任何帮助。
这是一个最小的可重现示例。
import tkinter as tk
class auto_haven:
def __init__(self, master):
self.master = master
self.frame = tk.Frame(self.master)
self.frame.place(relwidth=1, relheight=1)
self.admin_login_button = tk.Button(self.frame, text="Admin Login", font=40, command=self.new_window)
self.admin_login_button.place(relwidth=1, relheight=1)
def new_window(self):
self.newWindow = tk.Toplevel(self.master)
self.app = admin_login(self.newWindow)
class admin_login:
def __init__(self, master):
self.master = master
self.frame = tk.Frame(self.master)
self.frame.place(relwidth=1, relheight=1)
self.login_button = tk.Button(self.frame, text="Login", font=40, command=self.login)
self.login_button.pack()
self.back_button = tk.Button(self.frame, text="Exit", font=40, command=self.close_window)
self.back_button.pack()
def new_window(self):
self.newWindow = tk.Toplevel(self.master)
self.app = admin_panel(self.newWindow)
def close_window(self):
self.master.destroy()
def login(self):
self.close_window()
self.new_window()
class admin_panel:
def __init__(self, master):
self.master = master
self.frame = tk.Frame(self.master)
self.quitButton = tk.Button(self.frame, text = 'Quit', width = 25, command = self.close_window)
self.quitButton.pack()
self.frame.pack()
def close_window(self):
self.master.destroy()
def main():
root = tk.Tk()
app = auto_haven(root)
root.mainloop()
if __name__ == '__main__':
main()
当你调用self.login
时,它做的第一件事就是调用self.close_window()
。当您这样做时,它会调用self.master.destroy()
.然后,它调用self.new_window()
,self.newWindow = tk.Toplevel(self.master)
调用。
请注意,您现在正在尝试创建一个新窗口作为self.master
的子窗口,但您已经销毁了self.master
因此 tkinter 将抛出错误。创建新窗口时,它必须是现有窗口(如根窗口(的子窗口。