[英]Python, Tkinter - How to run 'shelve.close ()' when exiting the gui program?
我有一个简单的 gui(tkinter) 程序,可以将数据写入文件。 使用搁架。 当我想禁用程序时如何运行shelve.close()?
关闭一些无关紧要的事情的规范方法是使用上下文管理器:
with shelve.open(...) as myshelve:
# ALL YOUR CODE HERE
root.mainloop()
这保证了 shelve.close() 将被调用,即使您在代码中遇到任何异常。
这也是文档中推荐的方式:
不要依赖货架自动关闭; 当您不再需要它时,总是显式调用
close()
,或者使用shelve.open()
作为上下文管理器。
或者,由于您使用的是WM_DELETE_WINDOW
,您可以使用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 触发事件。 使用上下文管理器方法来覆盖所有领域。
当您的 GUI 停止时, mainloop
调用停止。 如果您想在 GUI 退出后运行一些代码,只需将其放在mainloop()
。
root.mainloop() # starts the GUI and waits for the GUI to close
shelve.close() # do something after the GUI closes
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.