繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM