Problema con grab_focus ( )
Milton Galo Patricio
minostro en sicet.cl
Lun Jul 24 06:32:46 CEST 2006
intenta poner la sentencia widget.grab_focus(), al momento que el usuario
presione en el cuadro de dialogo aceptar, es decir:
1. se escribe un texto
2. la caja pierde el foco
3. verificamos si es entero
1. retornamos verdadero
4. si no
1. instanciamos el cuadro de dialogo mostrando el mensaje de
error
2. hacemos set_sentive(False), al widget padre [no tendría
sentido dejar activado el widget padre si es que existe un error]
3. el usuario presiona aceptar o presiona la cruz del cuadro de
dialogo
1. destruimos el dialog
2. le ponemos el foco al widget
creo que siguiendo esos pasos todo saldrá bien...ahora no comparto lo que
quieres hacer es muy molesto el dialog al usuario, lo que he echo ya en dos
proyectos OpenSource es poner el entry con color rojo [usabilidad], pero
ahora trabajo en ponerle sonido [accesibilidad] para las personas que sean
daltonicas o tengan alguna invalides visual.
aunque son dos proyectos remunex [1] inventarix[2], te recomiendo que te
des un paseo por inventarix, ya que está programado en tres capas y está más
bonito el código ahi que en remunex [fue el primero, estaba aprendiendo]
[1] http://chileforge.cl/projects/remunex/
[2] http://chileforge.cl/projects/inventarix/
en la capa de gui encontrarás lo que andas buscando...ahh y tambien en la de
service, que estes bien
2006/7/23, carlos villa <carlosfvo en gmail.com>:
>
> por supuesto la idea esque no me deje pasar el siguiente entry o sea
> widget creo que me entendio mal, y aqui esta la version sin las
> vocales lo siento pero es un estandard de desarrollo que adoptamos
> alrrededor de este proyecto igual aqui esta mas claro espero..
>
> si sabe como resolver el problema del grab_focus agradeceria ...
>
> gracias
>
>
> > def on_txte_mdfcar_grupo_cntdad_usrios_focus_out_event (self, widget,
> > data=None):
> >
> > self.entry_texto = self.entry.get_text()
> >
> > if not self.entry_texto.isdigit():
> > print 'NO digito'
> > dialogo_error(self.wndow , 'El dato debe ser un Digito')
> > self.entry.grab_focus()
>
>
>
>
>
>
>
> ---------- Forwarded message ----------
> From: Arnau Sanchez <arnau en ehas.org>
> Date: 23-jul-2006 18:29
> Subject: Re: [Python-es] Problema con grab_focus ( )
> To: La lista de python en castellano <python-es en aditel.org>
>
>
> 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.entry_texto = self.entry.get_text()
> >
> > if not self.entry_texto.isdigit():
> > print 'NO digito'
> > dialogo_error(self.wndow , 'El dato debe ser un Digito')
> > self.entry.grab_focus()
> > _______________________________________________
> > Python-es mailing list
> > Python-es en aditel.org
> > http://listas.aditel.org/listinfo/python-es
> >
> >
> _______________________________________________
> Python-es mailing list
> Python-es en aditel.org
> http://listas.aditel.org/listinfo/python-es
> _______________________________________________
> Python-es mailing list
> Python-es en aditel.org
> http://listas.aditel.org/listinfo/python-es
>
--
Milton Inostroza Aguilera
Más información sobre la lista de distribución Python-es