El 19/06/2013 03:35 a.m., Oswaldo escribió:
El 19/06/2013 2:29, manuelcortez escribió:
Hola,
He estado probando a usar WxPython para la parte de las interfaces
gráficas, más que nada porque puedo permitirme desarrollar una misma app
para GNU/Linux y Windows, y como usa las API nativas de cada SO, en
Debian con Gnome usa Gtk y en Windows, supongo que las API del propio
sistema, lo cual ayuda porque ambas plataformas conectan con sus
respectivas librerías de accesibilidad.
El tema lo tengo al querer probar un test en Windows (no lo he podido
probar en Debian porque no funciona el SO por ahora), y es esto: Cuando
hago un diálogo con unos cuantos botones, suelo querer acomodarlos en
cierta forma por la pantalla utilizando un FlexGridSizer. Por ejemplo,
en el trozo de código que adjunto debajo del mensaje, intento colocar un
FlexGridSizer de 2x2, luego pongo dos botones arriba y dos debajo.
Al ver la interfaz con cuatro botones, lo normal, es pensar que como se
puede manejar la interfaz con teclado, puedes usar las flechas de
dirección (cursores) para ir hacia el botón de la derecha, o al de abajo
de donde inicia el foco de la aplicación, pero no pasa exactamente así.
El avance/retroceso con el teclado mueve el foco al siguiente/previo
control dentro del taborder independientemente de donde este situado
visualmente.
Si quieres montarte un cuadro de botones en donde puedas mover el foco
con las flechas en cualquier dirección tendrás que montártelo tu mismo
(desconozco si existe ya algún tipo de contenedor que haga esa función).
Gracias por la respuesta. Eso me suponía, pero quería preguntar. Supongo
que desde la perspectiva de WXPython solo se usa TAB y SHIFT+TAB para
avanzar y retroceder, al menos eso es lo que se encuentra como
"Navegación por teclado", fuera de los aceleradores.
De todos modos, me da a mí que tendré que tirar esta vez de Pygtk.
La razón por la que quiero que esto se pueda navegar en direcciones que
tú decidas, es porque lo que pretendo mostrar es una tabla con botones,
y la ubicación en fila y columnas de estos botones es prácticamente
indispensable para las personas, y estas personas, no van a estar viendo
la pantalla, por eso usarán el teclado. Si no pueden saber en qué fila y
columna se encuentran, o cuando termina una fila y empieza otra, no
servirá de mucho el programa.
En un intento de modificar el orden de cómo se muestran las cosas, quise
hacer que un objeto Frame capturara todas las pulsaciones de teclado.
Según leí, si pasas como style wx.WANTS_CHARS, todas las pulsaciones que
ocurran en la ventana son capturadas, lo que ocasionará que si quieres
que se pueda usar la navegación por teclado, tendrás que manejar tú el
asunto de tab y Shift+Tab. Tenía pensado capturar todas las pulsaciones
y definir mis propias funciones para manejar cuando se presione este
tipo de teclas, o las flechas. El punto es, que no funciona. Paso como
estilo al Frame wx.WANTS_CHARS, pero si entro y pulso alguna flecha, o
Tab y Shift+Tab, igual puedo moverme entre los diferentes elementos como
si no hubiera ningún atributo de estilo. Al menos eso ocurre teniendo
ejecutando un lector de pantalla. Desconozco si esto influye en que
WXPython tenga cierto comportamiento "diferente" a lo que normalmente
hace. Hace tiempo me olvidé de una línea de código, y cuando revisaba la
pantalla con NVDA (un lector de pantalla, que por cierto está hecho en
Python), podía navegar entre los botones sin ningún problema, el caso
es, que no se veían estos en la pantalla, por lo que solo se podían
acceder con esta aplicación.
El tema con PyGtk bajo Windows, es que no se conecta directamente con
MSAA (y dudo que haya alguna librería para Python que pueda proporcionar
funciones para estas bibliotecas) o con IAccessible. Lo que se me
ocurre, al vuelo, es derivar clases de controles, y conectarles un
"focus-in-event" a una función, que mande la etiqueta (label) de los
controles hacia los lectores de pantalla (por suerte, para los
principales, hay bindings para Python que permiten controlar la voz).
Solo tengo que buscar cuáles controles pueden mandar esta señal.
Gracias por la respuesta, y saludos.
_______________________________________________
Python-es mailing list
[email protected]
http://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/