如何在Python Tkinter程序中处理窗口关闭事件(用户点击'X'按钮)?如何处理Tkinter中的窗户关闭事件?
72
A
回答
93
Tkinter支持名为protocol handlers的机制。这里,术语协议是指应用程序和窗口管理器之间的交互。最常用的协议称为WM_DELETE_WINDOW
,用于定义用户使用窗口管理器明确关闭窗口时发生的情况。
可以使用方法安装处理器此协议(小部件必须是Tk
或Toplevel
小部件):
这里有一个具体的例子:
import tkinter as tk
from tkinter import messagebox
root = tk.Tk()
def on_closing():
if messagebox.askokcancel("Quit", "Do you want to quit?"):
root.destroy()
root.protocol("WM_DELETE_WINDOW", on_closing)
root.mainloop()
-13
使用closeEvent
def closeEvent(self, event):
# code to be executed
13
Matt已经显示了一个经典的修改n关闭按钮。
另一种是让关闭按钮最小化窗口。
您可以通过使iconify方法
成为protocol方法的第二个参数来重现此行为。
这里的工作的例子,在Windows 7测试:
# Python 3
import tkinter
import tkinter.scrolledtext as scrolledtext
class GUI(object):
def __init__(self):
root = self.root = tkinter.Tk()
root.title('Test')
# make the top right close button minimize (iconify) the main window
root.protocol("WM_DELETE_WINDOW", root.iconify)
# make Esc exit the program
root.bind('<Escape>', lambda e: root.destroy())
# create a menu bar with an Exit command
menubar = tkinter.Menu(root)
filemenu = tkinter.Menu(menubar, tearoff=0)
filemenu.add_command(label="Exit", command=root.destroy)
menubar.add_cascade(label="File", menu=filemenu)
root.config(menu=menubar)
# create a Text widget with a Scrollbar attached
txt = scrolledtext.ScrolledText(root, undo=True)
txt['font'] = ('consolas', '12')
txt.pack(expand=True, fill='both')
gui = GUI()
gui.root.mainloop()
在这个例子中,我们为用户提供了两个新的退出方式:
传统的文件菜单 - >退出,也是Esc键按钮。
相关问题
- 1. 如何处理窗体关闭事件
- 2. 如何关闭Tkinter窗口
- 3. 如何关闭事件处理程序?
- 4. 如何处理AlertDialog关闭事件?
- 5. ASPxGridView:如何处理客户端的关闭事件?
- 6. 让Tkinter继续处理下一个事件,不关闭当前弹出窗口
- 7. 如果用户点击关闭('X')按钮,如何处理PowerShell窗口的关闭事件
- 8. 在Swift中处理窗口的关闭事件
- 9. Tkinter窗口关键事件
- 10. 在javascript中处理IE窗口关闭事件
- 11. iPad的关闭键盘事件处理
- 12. 关闭tkinter的窗口
- 13. 如何在Java中处理关闭的应用程序事件?
- 14. 处理JFileChooser窗口关闭?
- 15. 处理一个退出的MonoMac /关闭窗口事件
- 16. 关闭模式弹出式窗口的事件处理程序
- 17. 如何让用户从其window_loaded事件中关闭wpf窗口
- 18. 如何处理客户端关闭Javascript?
- 19. 是否可以在事件处理程序中关闭窗体,其中事件处理程序在类中?
- 20. 关闭窗体的事件
- 21. 位置设在Tkinter的一个窗口关闭鼠标事件
- 22. 如何识别窗口关闭事件?
- 23. 如何捕捉窗口关闭事件?
- 24. 如何防止在FormClosing事件中关闭和处理winform?
- 25. 为OpenOffice.org处理“保存/关闭事件”
- 26. 处理事件“Excel正在关闭”
- 27. 关闭事件处理程序C#
- 28. jQuery:灯箱关闭事件处理
- 29. Javascript关闭时处理mouseover事件
- 30. Javascript关闭/事件处理噩梦
我使用了类似的代码,但是使用了`root.destroy()` – 182764125216 2011-08-03 00:03:34
如果你正在使用像Twisted这样独立维护一个事件循环或者Tkinter(例如:twisted的reactor对象)的东西,确保外部主循环被任何smenatics它提供了这个目的(例如:twisted.stop()用于扭曲) – 2012-02-13 16:40:54