Tkinter 摧毁了 Toplevel 并创建了另一个错误



关闭第一个顶级后尝试在 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 将抛出错误。创建新窗口时,它必须是现有窗口(如根窗口(的子窗口。

相关内容

  • 没有找到相关文章

最新更新