0

如果我僅使用tkinter代替messagebox功能並隱藏根窗口,是否必須明確在腳本退出之前銷燬根窗口?需要銷燬()隱藏的根窗口?

import tkinter as tk 

root = tk.Tk() 
root.withdraw() 

answer = tk.messagebox.askyesno('Confirm', 'Save file?') 
# do work here ... 

root.destroy() # <-- do I need this? 
+0

我會,因爲如果你不這樣做,你從控制檯運行,你可能會得到奇怪的TclError消息,當auto-gc以錯誤的順序銷燬東西。另外,將'parent = root'添加到messagebox調用中,因爲我相信第二個Tk()調用可能在內部發生而沒有。 –

回答

3

是的。

那麼,這不是真的。例如,您可以立即致電sys.exit()退出。 Tkinter的主循環 - 處理事件的無限循環 - 旨在運行,直到根窗口被銷燬。

+0

我不是在這個腳本中明確調用'mainloop()'。主循環仍然運行?我想我的問題是,當腳本結束時,它是否會破壞隱藏的根窗口,與顯式的'root.destroy()'相同?我已經看到的大多數例子都顯示了使用隱藏的根窗口,不用打擾'root.destroy()'。 – mcu

+0

@ coding4fun:我不知道,我從來沒有這樣編碼過。一般來說,你必須運行'mainloop'。根據平臺的不同,當您顯示標準對話框時,它可能會使用不同的東西。 –