Cerrar formulario mdi con todos sus hijos...

Carlos López Pérez clp en opencanarias.com
Jue Nov 10 10:26:12 CET 2005


Yo nunca he usado MDI en mis aplicaciones.

Pero lo que se me ocurre a priori es utilizar una estructura de datos
para realizar lo que deseas.

Cuando se creen los formularios hijos se registren en el padre mediante
una función.
 En la creación del formualario hijo:
	__init__(self, ...)
		....
		self.GetParent().registerMDIForm(self)

En el formulario padre (previamente haber inicializado la lista
self.mlChild = []):
	...
        registerMDIForm(self, oChild):
		self.mlChild.append(oChild)


En la destrucción de un formulario hijo, eliminar el registro en el
formulario padre:
       ...
       removeMDIForm(self, oChild):
		self.mlChild.remove(oChild)

Cuando se cierre el formulario padre, recorrer la lista y consultar una
bandera por si están ocupados...
	
	busy = False
	for child in self.mlChild:
		if not child.isBusy():
			continue
		busy = True
		break
	if busy:
		#Para la destrucción
		return
	for child in self.mlChild:
		child.Close(True) # o Destroy...


Salu2 de clp ;)


		

El mié, 09-11-2005 a las 15:45 -0300, Ariel Nardelli escribió:
> Hola!
> Uso wx2.6 y se me esta presentando un problema...
> 
> Tengo un solo formulario mdi donde dentro voy abriendo varios 
> formularios hijos para hacer las cosas, el tema es que cuando dan salir 
> desde la opcion del menu tengo puesto esto....
> 
>             self.Close()
>             self.Destroy()
>             sys.exit(0)
> 
> O sea se cierra y destruye y sale el formulario mdi PERO no verifica que 
> ventanas estan habiertas (ventanas hijas) y por eso cierra directamente 
> todo.
> Lo que yo quiero hacer es que antes de cerrar el formulario padre (mdi) 
> primero cierre todos los formularios hijos y despues recien cierre el 
> mdi, es mas, hasta podria poner una "bandera" para que si alguna ventana 
> esta haciendo un proceso que no se puede cortar no permita cerrar la 
> aplicacion :)
> La cosa es como se hace? como hacer desde el mdi para saber que ventanas 
> hijas tengo abiertas y cerrarlas?, en cada formulario tengo una funcion 
> que las cierra que cierra las bases y todo lo demas, se llama atalo :) 
> asi que la idea para hacer un cierre prolijo seria ver que formularios 
> hay abiertos, ver si en ese formulario esta activada la bandera de que 
> esta procesado  (bandera en 1) y despues ejecutar el atalo de ese 
> formulario para que haga un cierre "limpio"...
> 
> Se puede hacer esto?, como?
> 
> Gracias!!!!
> Ariel
> 
-- 
Carlos López Pérez <clp en opencanarias.com>

------------ próxima parte ------------
_______________________________________________
Python-es mailing list
Python-es en aditel.org
http://listas.aditel.org/listinfo/python-es


Más información sobre la lista de distribución Python-es