Cerrar una secuencia de comandos de Python easyGUI con el botón estándar 'cerca'
-
22-08-2019 - |
Pregunta
He creado un muy aplicación sencilla, que presenta una entrybox easyGUI () y continúa este bucle indefinidamente, ya que recibe la entrada del usuario.
Puedo salir del programa utilizando el botón Cancelar, ya que devuelve None, pero también me gustaría ser capaz de utilizar el estándar de 'cerca' botón para salir del programa. (Es decir. La parte superior derecha de la ventana de Windows, parte superior izquierda de una ventana de Mac) Este botón hace nada actualmente.
Echando un vistazo al módulo easyGUI me encontré con esta línea:
root.protocol('WM_DELETE_WINDOW', denyWindowManagerClose )
Esto parece ser el culpable. No soy un experto Tkinter pero probablemente podría encontrar la manera de alterar este controlador para actuar de la manera que quiero.
Sin embargo, como preferiría no enredar con el módulo easyGUI, ¿Hay una manera de anular este comportamiento de mi script principal, y tienen el botón de cierre o bien cerrar el programa de plano o Ninguno volver?
Solución
Se requeriría alterar el módulo easyGUI, sí. Me lo obtendrá modificado!
** He enviado en un correo electrónico al creador easyGUI explaning esta [24:12, Enero 23/09]
** Sólo quiero decir que la posibilidad de que este cambio suceda - en todo caso, que lo dudo - es muy pequeña. Usted ve, easyGUI pretende ser una forma sencilla, discreta para crear interfaces gráficas de usuario. Creo que esta adición no ayudaría cualquiera, sobre todo desde la interfaz es muy secuencial, por lo que sería confuso para los nuevos usuarios. [24:19, Enero 23/09]
** El creador easyGUI dijo esto en respuesta a mi correo electrónico:
Una de diálogo easyGUI nunca se debe salir la aplicación - que debe pasar de nuevo un valor a la persona que llama y dejar que el persona que llama decidir qué hacer.
Sin embargo, esta es una idea interesante. En lugar de hacer caso omiso de un clic en el icono de "cerrar", cajas easyGUI podía devolver el mismo valor que un clic en el botón "cancelar" volvería. Voy a meditar en esto.
- Steve Ferg
Creo que este es el progreso por lo menos. [14:40, Enero 23/09]
Otros consejos
No sé en este momento, pero ¿ha intentado algo como esto:?
root.protocol('WM_DELETE_WINDOW', self.quit)
o
root.protocol('WM_DELETE_WINDOW', self.destroy)
No he probado, pero algo así como Google "Tkinter protocol WM_DELETE_WINDOW"
he encontrado una solución, la respuesta está por debajo de la casilla de selección, cuando define algunas funciones (que puede escribir sólo para encontrar denyWindowManagerClose) e ir a donde él lo define. Simplemente borrarlo y poner este código en su lugar.
def denyWindowManagerClose():
#------------------------------------------------------------------
# Changed by ProgrammingBR
# Enables the user to close the window without entering a value
# Youtube URL: https://www.youtube.com/channel/UCTZh6kWz_iYACNE6Jcy2lhw
#------------------------------------------------------------------
global __enterboxText
__enterboxText = None
boxRoot.quit()
Se puede crear un archivo de copia de seguridad, pero esto va a funcionar para todas las cajas, las sugerencias que se dan aquí aparte de esto no va a funcionar, probé el ellos. Si desea ver un video que tengo en él (está en portugués, pero se puede seguirla) sólo tiene que ir al canal de youtube, voy a subir pronto y enviar el enlace aquí:)