如何在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