Python,Tkinter-退出gui程序时如何运行“ shelve.close()”?

时间:2018-09-18 13:10:16

标签: python python-3.x tkinter shelve

我有一个简单的gui(tkinter)程序,可将数据写入文件。使用搁置。 要禁用该程序时如何运行shelve.close()?

2 个答案:

答案 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