Problema con grab_focus ( )

Arnau Sanchez arnau en ehas.org
Lun Jul 24 01:29:24 CEST 2006


Carlos,

Eso de abrir una ventana modal y ejecutar un grab_focus() dentro de un manejador 
de "focus-out", así, todo de golpe, no suena muy bien, no es raro que no 
funcione... no sólo es que te salga más de una ventana, sino que es muy probable 
que la aplicación se cuelgue. Una solución sería mostrar la ventana modal con 
show() (no con run()), capturar las señales correspondientes a "response" y 
"delete-event", y en el manejador, además de destruir la ventana, darle el foco 
del entry.

def response(widget, arg, entry):
	entry.grab_focus()
	widget.destroy()

def on_focus_out(widget, event, entry):
	text = widget.get_text()
	if text.isdigit(): return
	message = gtk.MessageDialog(None, gtk.DIALOG_MODAL, gtk.MESSAGE_WARNING, 	 
gtk.BUTTONS_OK, "Dato incorrecto")
	message.connect("delete-event", response, entry)
	message.connect("response", response, entry)
	message.show()

Dicho esto, y ya que estamos con el tema, a mi particularmente me molestaría 
mucho que una aplicación no me permitiera cambiar el foco (pasar a otra 
aplicación, por ejemplo), simplemente porque hay un valor (temporalmente) 
incorrecto en un widget. Hay muchas alternativas, una sería que la validación se 
hiciera sólo al pasar a otro widget dentro de la misma aplicación. En fin, sólo 
es una idea.

Y finalmente una cosa en la que no vale la pena insistir porque ahí cada uno 
hace de su capa un sayo, pero... ¿¿realmente no puedes acortar esos nombres de 
funciones (sin vocales)?? es realmente duro de leer....

salud!
arnau

carlos villa escribió:
> buenas tardes me urge ayuda estoy trabajando glade - python2.4 me
> explico como funciona tengo el evento
> focus_out_event de un text Entry en el cual valido que lo que inserten
> sea un digito
> self.texto.isdigit() si esto no es un digito entonces me muestra una
> ventana de error
> la cual llamo : dialogo_error(self.wndow_atntccion_mdfcar_grupo, 'El
> dato debe ser un Digito') despues ejecuto un grab_focus para que no
> deje cambiar cambiar a otra entrada de texto sin antes escribir el
> dato correcto el cual debe ser un digito.
> 
> mi problema esque al parecer por funcionamiento del focus_out_event mi
> ventana de error se dispara 2 veces y por lo tanto se muestra 2 veces
> en patalla, y no se que hacer para que el focus_out_event no me
> dispare 2 veces la señal creo que el erro esta ahi.
> si no es asi por favor diganme si hay otra forma de evitar que se
> cambie a otro entry sin antes haber digitado en tipo de dato correcto
> el usuario
> si me pueden ayudar agradeceria mucho.
> 
> aqui esta la parte del codigo:
> 
> def on_txte_mdfcar_grupo_cntdad_usrios_focus_out_event (self, widget,
> data=None):
> 
>    self.texto = self.txte_mdfcar_grupo_cntdad_usrios.get_text()
> 
>    if not self.texto.isdigit():
>      print 'NO digito'
>      dialogo_error(self.wndow_atntccion_mdfcar_grupo, 'El dato debe
> ser un Digito')
>      self.txte_mdfcar_grupo_cntdad_usrios.grab_focus()
> _______________________________________________
> 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