我有一个简单的gui(tkinter)程序,可将数据写入文件。使用搁置。 要禁用该程序时如何运行shelve.close()?
答案 0 :(得分:3)
关闭无所事事的规范方法是使用上下文管理器:
with shelve.open(...) as myshelve:
# ALL YOUR CODE HERE
root.mainloop()
这保证即使在代码中出现任何异常的情况下,都将调用shelve.close()。
它也是recommended way in the documentation:
不要依靠架子自动关闭;在您不再需要
close()
时,请始终明确地调用它,或者使用shelve.open()
作为上下文管理器。
或者,由于您正在使用tkinter,因此可以使用WM_DELETE_WINDOW
事件:
import tkinter as tk
root = tk.Tk()
def when_window_is_closed():
myshelve.close()
root.destroy()
root.protocol("WM_DELETE_WINDOW", when_window_is_closed)
root.mainloop()
此方法更糟,因为它取决于tk触发事件。请改用上下文管理器方法来涵盖所有方面。
答案 1 :(得分:0)
GUI停止时,mainloop
调用停止。如果要在GUI退出后运行一些代码,只需将其放在mainloop()
之后。
root.mainloop() # starts the GUI and waits for the GUI to close
shelve.close() # do something after the GUI closes