如果我将 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()
我想制作一个 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()