Pregunta

Sólo quiero que el equivalente de cierre y reapertura de mi programa principal. Quiero invocar cuando un "nuevo" -como opción de un menú desplegable que se hace clic en. Algo como llamar root.destroy () y luego volver a iniciar el mainloop.

¿Cómo puedo hacer esto?

¿Fue útil?

Solución

Usted podría tomar toda su lógica de construcción de interfaz gráfica de usuario y el código de estado inicial de la mainloop y ponerlo en funciones. Llame a estas funciones desde el mainloop (algo así como: buildgui () y initstate ()) y, a continuación, cuando el usuario hace clic en el icono de menú, simplemente llamar initstate () para establecer de nuevo como lo fue cuando se inició la aplicación primero

Otros consejos

Existen al menos tres maneras en que puede resolver esto.

Método uno: la finta de la cabeza . Al crear su aplicación, no ponga todos los widgets en la ventana raíz. En su lugar, ocultar la ventana raíz y crear un nuevo nivel superior que representa su aplicación. Al reiniciar es sólo una cuestión de la destrucción de ese nuevo nivel superior y volver a ejecutar toda su lógica de puesta en marcha.

Segundo método: nuclear y allanar . Similar en concepto, pero ligeramente diferentes en ejecución. En este modelo, cuando se desea reiniciar sólo tiene que borrar todos los widgets en la ventana principal, restablecer la geometría en nulo (lo que la ventana volverá a cambiar el tamaño sí sobre la base de su contenido) y vuelva a ejecutar la lógica que atrae a todos los otros widgets .

Método tres:. si funcionó la primera vez ... Como sugerido por Martín v Löwis, simplemente tiene su programa exec una nueva instancia del programa, luego salir.

Los dos primeros métodos son potencialmente más rápido y tienen la (des?) Ventaja de preservar el entorno actual. Por ejemplo, podría guardar la copia del portapapeles, ancho de las columnas, etc. El tercer método garantiza absolutamente una pizarra en blanco.

Si está en Unix, reinicie la aplicación completa con os.execv. Asegúrese de que pase todos los argumentos de línea de comandos, etc.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top