¿Cómo manejo el evento cerrar ventana (usuario haciendo clic en el botón 'X') en un programa Python Tkinter?¿Cómo manejo el evento cerrar ventana en Tkinter?
Respuesta
Tkinter admite un mecanismo llamado protocol handlers. Aquí, el término protocolo se refiere a la interacción entre la aplicación y el administrador de ventanas. El protocolo más comúnmente utilizado se llama WM_DELETE_WINDOW
, y se usa para definir qué sucede cuando el usuario cierra una ventana explícitamente usando el administrador de ventanas.
se puede utilizar el método de -instalar un controlador de para este protocolo (el widget debe ser un widget Tk
o Toplevel
):
Aquí tienen un ejemplo concreto:
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()
Uso el cierreEvent
def closeEvent(self, event):
# code to be executed
Esta respuesta necesita más detalles. ¿Dónde se coloca esta línea? Un poco de tiddling de mi parte parece que no puede hacer que funcione. – thedayturns
Matt ha mostrado una modificación clásica n del botón de cerrar.
El otro es hacer que el botón Cerrar minimice la ventana.
Puede reproducir este comportamiento haciendo que el método iconify
sea el segundo argumento del método protocol.
Aquí está un ejemplo de trabajo, probado en 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()
En este ejemplo que damos al usuario dos nuevas opciones de salida:
el menú archivo clásico -> Salir, y también el botón de Esc .
- 1. Función para cerrar la ventana en Tkinter
- 2. Capturar ventana cerrar evento
- 3. ¿Cómo manejo globalmente el evento Cerrar de fancybox?
- 4. ¿Cómo cerrar una ventana de Tkinter presionando un botón?
- 5. Tkinter: invocar evento en el bucle principal
- 6. ventana no aparece utilizando Tkinter
- 7. ¿Cómo manejo el evento SessionSecurityTokenReceived en Global.asax?
- 8. Cómo capturar el navegador cerrar evento?
- 9. Ventana de Javascript cerrar evento en lugar de descargar evento para todos los navegadores
- 10. ¿Cómo cancelar un formulario cerrar en Cerrar evento?
- 11. Cómo cerrar una ventana usando jQuery
- 12. PySide/PyQt detecta si el usuario intenta cerrar la ventana
- 13. ¿Cómo cerrar la ventana en awt?
- 14. ¿Cómo centrar una ventana en la pantalla en Tkinter?
- 15. ¿Cómo puedo manejar el evento Cerrar en Socket.io?
- 16. Cómo atrapar el evento de minimizar ventana?
- 17. ¿Cómo manejo el evento de cambio Canvas.Top en WPF?
- 18. Cerrar programáticamente ventana gtk
- 19. wxpython auinotebook cerrar pestaña evento
- 20. ¿Cómo configuro un tamaño de ventana mínimo en tkinter?
- 21. Cómo dibujar imágenes en la ventana de tkinter
- 22. Obtener tamaño de ventana de Tkinter
- 23. Botón HTML Cerrar ventana
- 24. Cómo gestionar el evento cerrado de la ventana de PowerShell si el usuario hace clic en el botón Cerrar ('X')
- 25. Cómo cerrar la ventana emergente y redireccionar la ventana principal
- 26. Evento para el botón rojo Cerrar de NSWindowController
- 27. ¿Cómo cerrar una ventana emergente de Liferay.util.openWindow?
- 28. Cómo cerrar una ventana abierta de eclipse
- 29. ¿Cómo cerrar fancybox desde la ventana secundaria?
- 30. ¿Cómo cerrar la ventana por su nombre?
utilicé un código similar pero con 'root.destroy()' – 182764125216
Si está utilizando algo como Twisted que mantiene un bucle de evento independientemente o Tkinter (por ejemplo: objeto de reactor retorcido) asegúrese de que el bucle principal externo se detenga con cualquier smenatics proporciona para ese propósito (por ejemplo: reactor.stop() para twisted) –
En mi Python 2.7 en Windows, 'Tkinter' no tenía un cuadro de mensaje de submódulo. Utilicé 'import tkMessageBox como messagebox' – IronManMark20