gpt4 book ai didi

python - 在 Tkinter 应用程序关闭时执行任务

转载 作者:太空宇宙 更新时间:2023-11-04 09:49:06 25 4
gpt4 key购买 nike

当我的 Tkinter 应用程序结束时,它必须做一些工作(例如,将一些数据存储到文件中)。在某些情况下,应该询问用户是否真的要关闭应用程序。

有多种方法可以关闭 Tkinter 应用程序:

  • 窗口上的 X
  • 一个按钮
  • 菜单栏中的一个条目

我怎样才能捕捉所有这类“事件”?

#!/usr/bin/env python3

from tkinter import *

def on_delete_window():
print('on_delete_window')
print('save my data')


if __name__ == '__main__':
root = Tk()

Button(root, text='Destroy', command=root.destroy).pack()
Button(root, text='Quit', command=root.quit).pack()
menu = Menu(root)
menu.add_command(label='Destroy', command=root.destroy)
menu.add_command(label='Quit', command=root.quit)
root.config(menu=menu)

# this catches ONLY the X in the window
# but none of the two buttons!
root.protocol('WM_DELETE_WINDOW', on_delete_window)

root.mainloop()

最佳答案

一种变通方法是定义一个closing_procedure 方法,该方法接受callback 参数,该参数根据对消息框 的回复进行开/关回调> 对话框,例如,您要将所有 关闭操作重定向到该对话框。

例子

try:                        # In order to be able to import tkinter for
import tkinter as tk # either in python 2 or in python 3
import tkinter.messagebox as tkmb
except ImportError:
import Tkinter as tk
import tkMessageBox as tkmb


def closing_procedure(callback, *args, **kwargs):
response = tkmb.askyesno("Quit", "Do you really want to close?")
if response:
callback(*args, **kwargs)
else:
print("Closing cancelled!")


if __name__ == '__main__':
root = tk.Tk()
button = tk.Button(root, text="Quit",
command=lambda : closing_procedure(root.quit))
button.pack()
root.protocol('WM_DELETE_WINDOW',
lambda : closing_procedure(root.destroy))
root.mainloop()

关于python - 在 Tkinter 应用程序关闭时执行任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48603066/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com