我想制作一個包含一個按鈕的視窗,該按鈕在關閉初始視窗時打開另一個新視窗。這聽起來很簡單,但我知道我必須在這里做錯事,因為當它打開第二個視窗時它不能破壞初始視窗。這是我得到的錯誤:_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()
我的意圖是制作一種門戶/啟動器/選單視窗,讓您可以打開其他視窗(這顯然比它更重要)。同樣,我知道我做錯了什么,但我不知道該怎么做。我嘗試將初始視窗或第二個視窗設為 Toplevel,但這不起作用(如我所愿)。目前,“openNewWindow()”所做的只是打開第二個視窗,但保持第一個視窗打開(但沒有焦點)并給出上述錯誤。
那么,誰能告訴我為什么會發生這種情況以及如何解決它?
uj5u.com熱心網友回復:
我認為您需要更改為 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()
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/462078.html
標籤:tkinter 窗户 python-3.9
