我想创建一个包含按钮的窗口,该按钮在关闭初始窗口时打开另一个新窗口。这听起来很简单,但我知道我在这里一定做错了什么,因为它无法在打开第二个窗口时破坏初始窗口。这是我得到的错误:_tkinter.TclError: can't invoke "destroy" command: application has been destroyed
,这是代码示例:
from tkinter import *
def openWindow2():
win2 = Tk()
win2.focus()
win2.geometry("1500x880+200+70")
win2.title("window2")
win2.mainloop()
def openWindow1():
win1 = Tk()
win1.geometry("700x700+600+150")
win1.title("window1")
win1.resizable(False, False)
titleFrame = Frame(win1)
titleFrame.pack(side=TOP, pady=25)
Label(titleFrame, text="Welcome", font=("Helvetica", 30)).pack()
def openNewWindow():
openWindow2()
win1.destroy()
openButton = Button(win1, text="New Window", font=("Helvetica", 20), command=openNewWindow)
openButton.pack(pady=5)
win1.mainloop()
openWindow1()
我的意图是做一种门户/启动器/菜单窗口,让你打开其他窗口(这显然比它更重要)。再一次,我知道我做错了什么,但我不知道该怎么做。我尝试使初始或第二个窗口顶层,但没有工作(如我所愿)。目前所有的"openNewWindow()"Does是打开第二个窗口,但保持第一个窗口打开(但未聚焦),并给出上述错误。
所以,谁能告诉我为什么会发生这种情况以及如何解决它?我认为您需要更改为Toplevel()而不是将Tk()实例加倍,然后撤回()原始窗口而不是destroy(),因为这是您的mainloop()所在的位置。你也可以用deiconify()恢复原来的窗口。看看这个
from tkinter import *
def openWindow2():
win2 = Toplevel()
win2.focus()
win2.geometry("1500x880+200+70")
win2.title("window2")
def openWindow1():
win1 = Tk()
win1.geometry("700x700+600+150")
win1.title("window1")
win1.resizable(False, False)
titleFrame = Frame(win1)
titleFrame.pack(side=TOP, pady=25)
Label(titleFrame, text="Welcome", font=("Helvetica", 30)).pack()
def openNewWindow():
openWindow2()
win1.withdraw()
openButton = Button(win1, text="New Window", font=("Helvetica", 20), command=openNewWindow)
openButton.pack(pady=5)
win1.mainloop()
openWindow1()