2017-06-14 56 views
1

我試圖檢查一個特定的Toplevel是否已經被銷燬,這發生在某個按鈕被按下之後,以便我可以在程序中做其他事情(即創建一個新的Toplevel)。如何檢查在tkinter中銷燬它之後是否存在頂層?

假設在用戶關閉初始頂層之後,shell的輸出應該是「N」。這將表明程序理解最初的頂層不再存在,使我能夠進入該特定if not t1.winfo_exists():條款的下一階段(見下文)。

此輸出不會發生。輸出沒有任何反應。我用'winfo_exists()',我找不到我所做的不正確。

from tkinter import * 

root = Tk() 

t1 = Toplevel(root) 
t1.title('REG') 

def GetREG(): 
    global e, reg 
    reg = e.get() # find out the user input 
    # Destroy the toplevel: 
    t1.destroy() # after the user presses the SubmitButton 

label = Label(t1, text="Enter your REG:") 
label.pack() 

e = Entry(t1) # for the user to input their REG 
e.pack() 

SubmitButton = Button(t1,text='Submit',command=GetREG) # button to submit entry 
SubmitButton.pack(side='bottom') 

if not t1.winfo_exists(): # TRYING TO CHECK when the does not exist 
    # supposedly, this should occur after the SubmitButton is pressed 
    # which shold allow me to then carry out the next step in the program 
    print("No") 

root.mainloop() 

難道是當用戶銷燬一個窗口,這不被認爲是不存在的狀態?當我使用十字架刪除t1頂層時,或者通過SubmitButton(在GetREG())刪除時,它不起作用。

有什麼建議嗎?

回答

1

當您檢查t1.winfo_exists()時,窗口仍然存在,因爲您在創建該函數後大約一毫秒就會調用該函數。 tkinter應該怎麼知道你想要這個if聲明等待窗口被銷燬?

如果您想在執行更多代碼之前等待它被銷燬,您可以使用方法wait_window,它類似於mainloop,因爲它處理事件直到窗口被銷燬。

from tkinter import * 

root = Tk() 
t1 = Toplevel(root)  
... 
root.wait_window(t1) 

# there is now no need to check, since it's not possible to get 
# here until the window has been destroyed. 

root.mainloop() 
相關問題