如果我将 window 编程为在打开一个新的后关闭,为什么它不关闭?

If I programmed a window to close after opening a new one why doesn't it close?

我想制作一个 window,其中包含一个按钮,可以在关闭初始 window 的同时打开另一个新的 window。这听起来很简单,但我知道我必须在这里做错事,因为它不能在打开第二个时破坏初始 window 。这是我得到的错误:_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()

我的意图是制作一种 portal/launcher/menu window,让您可以打开其他 windows(显然比它更重要)。再一次,我知道我做错了什么,但我不知道该怎么做。我尝试制作第一个或第二个 window 顶层,但这没有用(如我所愿)。目前,“openNewWindow()”所做的只是打开第二个window,但保持第一个打开(但未聚焦)并给出上述错误。

所以,谁能告诉我为什么会发生这种情况以及如何解决它?

我认为您需要更改为 Toplevel() 而不是将 Tk() 实例加倍,然后 withdraw() 原始 window 而不是 destroy() 因为那是您的 mainloop() 所在的位置。您还可以使用 deiconify() 恢复原来的 window。检查一下。

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()