onLoad y GTK

Arnau Sanchez arnau en ehas.org
Jue Jul 20 13:51:49 CEST 2006


la única forma de hacer eso, que yo sepa, es usando threads. Iba a hacerte un 
programa de ejemplo, pero he encontrado esta entrada, lo que me ahorra mucho 
trabajo :-)

http://www.async.com.br/faq/pygtk/index.py?req=show&file=faq20.006.htp

verás que usa el módulo threading (en vez de thread), con lo que el código 
resultante es bastante sencillo.

aprovecho el correo para recomendar este FAQ de PyGTK [1], aunque seguramente ya 
habrá salido antes en la lista. Como cualquiera pueda editarlo -siempre que 
estés registrado-, el FAQ está siempre vivo, actualizado y creciendo con nuevas 
entradas.

arnau

[1] http://www.async.com.br/faq/pygtk/index.py?req=index

camontuyu escribió:
> OK,
> 
> esa es la forma de crear un dialogo, pero yo quiero que se muestre
> cuando se halla mostrado la ventana principal y mientras está este
> dialogo realizar una serie de operaciones. El código que tengo sería
> así.
> 
> def main(self):
> 	""" Ejectua la aplicación """
> 	# creamos el dialogo de cargar
> 	d = DialogoConectar()
> 	d.show()
> 	
> 	[Operaciones costosas]
> 
> 	d.hide()
> 
> 	gtk.main()
> 
> con lo que no muestra nada hasta que no terminan las operaciones.
> 
> Creando este código me ha surgido otra cuestión, ¿como puedo heredar de
> un widget creando con el glade?
> 
> class DialogoConectar(gtk.Dialog):
> 	def __init__(self):
> 		gtk.Widget.__init__(self)
> 		
> 		interfaz = gtk.glade.XML(defines.BASE_INTERFAZ, 'dialogConectar')
> 		interfaz.signal_autoconnect(self)
> 		
> 		self = interfaz.get_widget('dialogConectar') 		
> 			
> 	def on_windowMain_destroy(self, ventana):
> 		print "saliendo del dialogo!"
> 
> 
> Supongo que lo que he puesto es una burrada, pero puede ser orientativo
> para ver si van por ahy los tiros.
> 
> Que me aconsejais?
> 
> 
> El mié, 19-07-2006 a las 13:02 +0200, Arnau Sanchez escribió:
>> camontuyu escribió:
>>
>>> Como podría hacer que después de que se cargase el formulario principal,
>>> este lanzase un dialogo modal para por ejemplo mostrar un progreso?
>>> (teniendo el formulario principal del fondo) ??
>> Se puede hacer de dos formas:
>>
>> 1) Creando el widget a mano (un dialog, por ejemplo), y llenándolo con los otros 
>> widgets que necesites. Ejemplo patatero:
>>
>> dialog = gtk.Dialog("Dialogo", main_app_window, gtk.DIALOG_MODAL | 	 
>> gtk.DIALOG_DESTROY_WITH_PARENT, (gtk.STOCK_CLOSE, gtk.RESPONSE_ACCEPT))
>>
>> # usa mejor una función que lambda, pero lo pongo así para que quede compacto
>> dialog.connect("response", lambda widget, response: widget.destroy())
>> vbox = gtk.VBox(False, 5)
>> label = gtk.Label("Esto aparece encima de la barra de progreso")
>> progress = gtk.ProgressBar()
>> #progress.set_text("progreso")
>> #progress.set_fraction(0.1)
>> vbox.add(label)
>> vbox.add(progress)
>> dialog.vbox.add(vbox)
>> dialog.show_all()		
>>
>> (cuando quieras cerrar el dialogo: dialog.destroy())
>>
>> 2) Creando el widget con glade (actívale la opción "modal" a esa ventana) y 
>> haciéndole un show() cuando quieras que se vea. Parece más fácil, pero esta 
>> opción también tiene sutilezas, si el usuario cierra la ventana se generará un 
>> destroy() y no podrá volver a usarse. Para evitarlo, debes capturar la señal 
>> "delete-event", y allí hacer un hide() del widget y un "return True"; con esto 
>> último le avisas a gtk que no quieres que destruya el widget, y entonces sí 
>> podrás volver a abrirlo.
>>
>> ...
>>
>> Hacer una barra de progreso implica seguramente tener tareas en segundo plano, 
>> lo que ya te decía que pueder ser complejo si son tus primeros pasos en pygtk, 
>> pero en fin, suerte.
>>
>> Si la tarea que se asocia a la barra de progreso tiene algo que ver con la 
>> lectura de ficheros/sockets, te puede ser útil esto:
>>
>> file:///usr/share/doc/python-gtk2-doc/html/gobject-functions.html#function-gobject--io-add-watch
>>
>> arnau
>> _______________________________________________
>> Python-es mailing list
>> Python-es en aditel.org
>> http://listas.aditel.org/listinfo/python-es
> 
> 
> 		
> ______________________________________________ 
> LLama Gratis a cualquier PC del Mundo. 
> Llamadas a fijos y m�viles desde 1 c�ntimo por minuto. 
> http://es.voice.yahoo.com
> 
> 
> ------------------------------------------------------------------------
> 
> _______________________________________________
> Python-es mailing list
> Python-es en aditel.org
> http://listas.aditel.org/listinfo/python-es
------------ 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