gpt4 book ai didi

python - Tkinter 破坏 Toplevel 并产生另一个错误

转载 作者:行者123 更新时间:2023-12-01 06:27:51 27 4
gpt4 key购买 nike

关闭第一个顶级后尝试在 Tkinter 中创建第二个顶级时,出现错误:

_tkinter.TclError: bad window path name ".!toplevel

仅当第一个顶级关闭时才会发生错误,当我在没有 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 将抛出错误。当您创建新窗口时,它需要是现有窗口的子窗口,例如根窗口。

关于python - Tkinter 破坏 Toplevel 并产生另一个错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60041178/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com