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/

Responder a