如果我僅使用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?
如果我僅使用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?
是的。
那麼,這不是真的。例如,您可以立即致電sys.exit()
退出。 Tkinter的主循環 - 處理事件的無限循環 - 旨在運行,直到根窗口被銷燬。
我不是在這個腳本中明確調用'mainloop()'。主循環仍然運行?我想我的問題是,當腳本結束時,它是否會破壞隱藏的根窗口,與顯式的'root.destroy()'相同?我已經看到的大多數例子都顯示了使用隱藏的根窗口,不用打擾'root.destroy()'。 – mcu
@ coding4fun:我不知道,我從來沒有這樣編碼過。一般來說,你必須運行'mainloop'。根據平臺的不同,當您顯示標準對話框時,它可能會使用不同的東西。 –
我會,因爲如果你不這樣做,你從控制檯運行,你可能會得到奇怪的TclError消息,當auto-gc以錯誤的順序銷燬東西。另外,將'parent = root'添加到messagebox調用中,因爲我相信第二個Tk()調用可能在內部發生而沒有。 –