Últimas noticias

En esta entrada te presentamos Tifloaudio, un podcast creado por Manolo Álvarez. En él, entre muchas otras curiosidades y tecnologías específicas para personas ciegas, se habla de NVDA. Escuchando en orden los episodios que te mostramos a continuación, harás un recorrido histórico por este lector de pantalla, desde que comenzó a ser un poco más conocido allá por el 2009 hasta la actualidad. Podrás ver su evolución, así como conocer en profundidad cómo funcionan algunas de sus características. Pulsando cada enlace, se abrirá la entrada correspondiente al episodio seleccionado en la web de Tifloaudio. Si estás preparado, ¡allá vamos!
Tiflo Audio 7: Demostración de NVDA
Tiflo Audio 55: Cambiar voces en el lector de pantalla NVDA
Tiflo Audio 70 – Utilizar Windows 10 con el lector de pantalla NVDA y una línea braille
Tiflo Audio 82 – Demostración novedades NVDA 2017.3: Nuevas voces Windows OneCore, Reconocimiento de textos OCR y entradas con líneas braille
Tiflo Audio 94 – Nuevos comandos para líneas braille con el lector de pantalla NVDA 2018
¡Esperamos que los disfrutes!

Varios complementos se han actualizado recientemente. En primer lugar, el complemento para VLC Media Player llega a la versión 2.7-dev en desarrollo, solucionando un error al detectar el idioma del sistema en la clase que gestiona los cuadros de edición del motor de interfaces QT.
Por otro lado, el complemento para el gestor de libros Calibre se actualiza a la versión de desarrollo 1.0-dev6 con un par de novedades, que copiamos aquí tal y como su autor las ha redactado:

  • Mejora la accesibilidad de los cuadros combinados, por ejemplo el de búsqueda.
  • En versiones de NVDA 2018.2 y siguientes se puede seleccionar en preferencias> opciones > calibre  el modo de lectura de los encabezados de tabla:
    • None (ninguno)
    • Standar: leerá todos los encabezados, de columna y de fila.
    • Classic: leerá sólo los encabezados de columna tal como hacía en versiones anteriores a la 2018.2.

Te recordamos que estos complementos no han sido declarados estables. A pesar de que cada vez funcionan mejor, su uso no se recomienda en entornos de producción.
El complemento estable que sí se ha actualizado es, valga la redundancia, el actualizador de complementos. La versión 18.08.1 añadió la posibilidad de buscar actualizaciones automáticamente cada 24 horas. La versión 18.08.1r2 soluciona un error crítico. Aquellos que tengan la 18.08.1 deberán actualizar manualmente. El resto recibirán esta nueva versión a través del propio complemento.
Como siempre, te recomendamos mantener tus complementos bien actualizados. Gracias a ellos se mejoran la experiencia y las características de NVDA.
Si te gusta el contenido que te ofrecemos, por favor, haz una donación para ayudar a sostener nuestra web y el trabajo que hacemos para que NVDA llegue día a día más lejos.

Este complemento lleva a la vida a la incidencia 3208 del núcleo de NVDA: posibilidad de verificar, descargar y aplicar actualizaciones de complementos.

Para buscar actualizaciones una vez instalado este complemento, ve al menú NVDA/Herramientas/Buscar actualizaciones de complementos (si NVDA avisó de actualizaciones, el elemento de menú dirá «Revisar actualizaciones de complementos», seguido de la cantidad de actualizaciones). Si hay actualizaciones disponibles, se mostrará una lista con las actualizaciones de complementos, consistiendo cada entrada en descripción, versión actual, y nueva versión. Selecciona Actualizar, y NVDA descargará y aplicará las actualizaciones secuencialmente, mostrando después un aviso para reiniciar NVDA.

Los siguientes complementos proporcionan característica de actualización nativa y en consecuencia sus actualizaciones no se verificarán con este complemento:

  • Braille Extender
  • Tienda para NVDA (Tienda de la comunidad de NVDA en español)
  • WeatherPlus

NOTAS IMPORTANTES:

  • Este es un complemento como prueba de concepto. Una vez se incluya en NVDA la característica en cuestión en forma de tienda de complementos, este complemento será descontinuado.
  • Este complemento no está pensado para ejecutarse en pantallas seguras. Si tienes complementos instalados en las pantallas seguras, incluso si copias Add-on Updater al modo de pantalla segura, Add-on Updater no funcionará.
  • Si las nuevas actualizaciones especifican un rango de compatibilidad (versiones de NVDA mínima y última probada) y tu versión de NVDA no está dentro de ese rango, no se procederá con la actualización del complemento.
  • No todos los complementos incluyen versiones de desarrollo. Si no recibes actualizaciones tras elegir instalar versiones de desarrollo de un complemento, cambia los complementos afectados al canal estable.
  • En algunos sistemas (en especial ordenadores unidos a un dominio corporativo), la característica de comprobación de actualizaciones puede no funcionar adecuadamente, y por tanto se deben descargar a mano las actualizaciones de complementos.
  • Algunas funciones requieren que NVDA esté instalado en el ordenador, idealmente en un equipo con Windows 10 o superior.
  • Algunas versiones de complementos incluyen valores hash SHA256 para comprobar la integridad del paquete del complemento, y si el valor hash no coincide, la actualización del complemento fallará.

Opciones del complemento

Puedes configurar las opciones de Add-on Updater desde la pantalla de opciones de NVDA (menú NVDA, Preferencias, opciones) en la categoría Add-on Updater. Las opciones de Add-on Updater son las siguientes:

  • Buscar actualizaciones de complementos automáticamente: si está marcada, NVDA buscará actualizaciones de complementos una vez al día. La comprobación de actualizaciones automáticas está habilitada en sistemas de Windows cliente y deshabilitada en sistemas de servidor.
  • Notificación de actualización de complementos (Windows 10 y posterior): puedes elegir recibir la notificación de actualizaciones como un diálogo o un aviso emergente. En versiones de Windows anteriores a la 10 o en sistemas Windows Server, o en copias portables de NVDA en ejecución, la notificación de actualizaciones se mostrará como un diálogo.
  • Actualizar complementos en segundo plano (Windows 10 o posterior con la notificación emergente configurada): si está marcada, Add-on Updater aplicará actualizaciones en segundo plano. Aparecerá un aviso informando de que se están descargando e instalando actualizaciones de complementos, seguido de otro mensaje anunciando los resultados de la actualización. Para que funcionen las actualizaciones en segundo plano, se debe configurar la notificación emergente en el tipo de notificación.
  • No actualizar complementos: permite elegir complementos que no deberían actualizarse.
  • Preferir versiones de desarrollo: los complementos marcados en esta lista recibirán versiones de desarrollo.
  • Canal de versión de desarrollo (el complemento seleccionado debe estar marcado en preferir versiones de desarrollo): permite seleccionar actualizaciones de desarrollo procedentes del canal beta o dev.
  • Fuente de actualización de complementos: puedes elegir de dónde conseguir las actualizaciones. Actualmente Add-on Updater soporta la descarga de actualizaciones desde las fuentes enumeradas a continuación. Se mostrará un mensaje de confirmación después de cambiar la fuente de actualizaciones

Las fuentes de actualización disponibles son:

  • Sitio web de complementos de la comunidad (por defecto)
  • Catálogo de complementos de la comunidad hispana
  • Catálogos mantenidos por las comunidades de NVDA en China y Taiwán
  • Tienda de complementos de NV Access (experimental)

Versión 23.04

  • Se ha añadido una opción de canal de desarrollo para permitir a los usuarios de complementos en desarrollo elegir entre canales de actualización dev y beta. Esta opción se muestra si el complemento está marcado en la lista preferir versiones de desarrollo.

Versión 23.03

  • Se ha añadido la tienda de complementos de NV Access como fuente experimental de actualización de complementos.

Versión 23.02

  • Se necesita NVDA 2022.4 o posterior.
  • NVDA dejará de ofrecer lo que parecen ser actualizaciones de complementos antiguas en la mayoría de complementos después de buscarlas. Se aplica a complementos cuyo texto de versión tenga la forma número.número.

Versión 23.01

  • NVDA comprobará la versión mínima de Windows en las actualizaciones de complementos si la fuente de actualizaciones está configurada en el sitio web de complementos de la comunidad de NVDA.
  • Se ha mejorado el rendimiento al descargar muchas actualizaciones de complementos a la vez. Como resultado, el orden de descarga de los complementos mostrado en el diálogo de progreso de descarga es aleatorio.
  • Algunas partes del complemento usan el módulo de Python concurrent.futures para mejorar el rendimiento. Concretamente, los procesos de búsqueda y descarga de actualizaciones.

Versión 22.11

  • Se necesita NVDA 2022.3 o posterior.

Versión 22.10

  • Se han añadido los catálogos de las comunidades de NVDA en China y Taiwán como fuentes de actualización de complementos (por Woody Tseng).

Versión 22.09

  • Se necesita NVDA 2022.2 o posterior.
  • NVDA comprobará los valores de hash SHA256 mientras se descargan las actualizaciones de complementos si la fuente de actualizaciones incluye valores hash de los paquetes de complementos. Si el valor de hash no es válido, la actualización del complemento fallará.

Versión 22.08

  • Reorganización interna del código importante y reescrituras.
  • En sistemas Windows Server, la función de actualización automática de complementos viene deshabilitada por defecto (afecta a las nuevas instalaciones).
  • Añadida la posibilidad de seleccionar distintas fuentes de actualización de complementos. Add-on Updater puede buscar actualizaciones alojadas en el sitio web de la comunidad de complementos (addons.nvda-project.org) o en el catálogo de complementos de la comunidad de NVDA en español (nvda.es). Se ha añadido un nuevo cuadro combinado en el panel de opciones del complemento para elegir la fuente de actualización de complementos.
  • En Windows 10 y posterior, es posible hacer que Add-on Updater busque, descargue e instale actualizaciones de complementos en segundo plano, siempre que NVDA esté instalado y la configuración de notificaciones esté en notificación emergente.
  • Se ha rediseñado la experiencia de descarga e instalación de actualizaciones de varios complementos, incluyendo el uso de un único diálogo que muestra el progreso de descarga y la actualización de complementos después de descargarlos todos.
  • Si NVDA está configurado para anunciar las actualizaciones en una notificación emergente, el elemento de menú «Buscar actualizaciones de complementos» se convertirá en «Revisar actualizaciones de complementos» cuando haya actualizaciones disponibles, incluyendo en el nuevo nombre la cantidad de actualizaciones.
  • En NVDA 2022.1 y posterior, Add-on Updater puede procesar argumentos de la línea de órdenes para el complemento (actualmente no hay ninguno).
  • En el diálogo de actualizaciones de complementos, los complementos deshabilitados por el usuario aparecen desmarcados por defecto, y se mostrará un mensaje de confirmación al marcar estos complementos e intentar actualizarlos, ya que al hacerlo se habilitarán.

Versión 22.07

  • Las URLs usadas por el complemento son ahora constantes dentro de un nuevo módulo (colaboración de Luke Davis).
  • El diálogo de progreso de descarga del complemento aparece ahora centrado en pantalla.

Versión 22.03

  • Se ha mejorado la seguridad evitando que el complemento cargue cuando NVDA se ejecuta en modo seguro.

Versión 22.02

  • Se necesita NVDA 2021.3 o posterior.
  • En Windows 10, se traducen las notificaciones emergentes del complemento.

Versión 22.01

  • Se necesita NVDA 2021.2 o posterior.
  • En sistemas servidores que ejecutan Windows Server 2016 o posterior, las actualizaciones de complementos se presentarán en un diálogo en lugar de usar notificaciones emergentes.

Versión 21.10

  • Vuelve a ser posible buscar actualizaciones de complementos en algunos sistemas, especialmente después de una instalación limpia de Windows.

Versión 21.09

  • Se necesita NVDA 2021.1 o posterior.
  • en Windows 10 o posterior, es posible seleccionar la notificación de actualizaciones de complementos entre mensaje emergente o diálogo de actualizaciones. Esto se puede configurar desde las opciones de Add-on Updater disponibles en la pantalla de opciones de NVDA.
  • Add-on Updater ya no comprobará información de la versión mínima de Windows en los complementos, ya que complementos como Windows App Essentials proporcionan mejor información de compatibilidad con Windows.

Versión 21.07

  • En Windows 10 y posterior, se mostrará una notificación emergente cuando haya actualizaciones de complementos disponibles. Ten en cuenta que no podrás hacer clic en esta notificación. Debes abrir el menú NVDA / Herramientas / Buscar actualizaciones de complementos para revisarlas.
  • Cuando se muestre el diálogo de complementos antiguos al arrancar, ahora puedes revisar los complementos antiguos y su motivo como si fueran actualizaciones de complementos.
  • Se ha mejorado la búsqueda de actualizaciones por dentro, incluyendo el uso de una colección de metadatos de complementos proporcionada por la comunidad para validar la compatibilidad de los mismos. Entre otras cosas, esto elimina la necesidad de publicar versiones nuevas del complemento cada vez que se quiere buscar actualizaciones de complementos nuevos.

Versión 21.05

  • NVDA ya no reproducirá tonos de error al buscar actualizaciones desde versiones alpha de desarrollo de NVDA 2021.1, causados por cambios al kit de herramientas de interfaz gráfica WXPython.

Versión 21.03

  • Se necesita NVDA 2020.4 o posterior.
  • NVDA presentará un diálogo de error si se producen errores al buscar actualizaciones, tales como la pérdida de conexión a Internet.

Versión 20.11

  • Se necesita NVDA 2020.3 o posterior.
  • Se han resuelto más problemas de estilo del código y fallos potenciales con Flake8.
  • NVDA ya no reproducirá tonos de error o parecerá no hacer nada al usar el complemento mientras NVDA se ejecuta desde el código fuente. En su lugar, se grabará un mensaje en el registro indicando este hecho.

Versión 20.07

  • Se necesita NVDA 2020.1 o posterior.
  • Si se encuentran instalados uno o más complementos obsoletos (como Screen Curtain), Add-on Updater mostrará un mensaje solicitando que se deshabiliten o desinstalen los complementos listados.
  • Ahora se pueden guardar, recargar o restablecer los ajustes de Add-on Updater pulsando NVDA+control+c, NVDA+control+r una vez o NVDA+control+r tres veces, respectivamente.

Versión 20.06

  • Se han resuelto muchos problemas de estilo del código y fallos potenciales con Flake8.

Versión 20.04

  • NVDA ya no reproducirá tonos de error o parecerá no hacer nada al intentar actualizar complementos mediante Add-on Updater.
  • Se ha resuelto un problema por el que la opción «Buscar actualizaciones de complementos» no se encontraba presente en el menú Herramientas de NVDA.

Versión 20.03

  • Se necesita NVDA 2019.3 o posterior.
  • Al instalar actualizaciones de complementos, Add-on updater ya no comprobará el rango de compatibilidad. El propio NVDA comprobará la compatibilidad del complemento.

Versión 19.11

  • Cuando haya actualizaciones de complementos disponibles, NVDA anunciará cuántas hay.

Versión 19.09

  • Necesita NVDA 2019.2 o posterior.
  • Se han resuelto errores de tiempo de espera agotado vistos al intentar descargar algunas actualizaciones de complementos (especialmente complementos alojados en GitHub).

Versión 19.04

  • Necesita NVDA 2019.1 o posterior.
  • Al instalar actualizaciones de complementos, se verificarán tanto la versión mínima como la última probada.

Versión 19.01

  • Necesita NVDA 2018.4 o posterior.
  • Mejorado el rendimiento al buscar actualizaciones de complementos.
  • El complemento ahora es más compatible con Python 3.

Versión 18.12.2

  • Preparado para Python 3.
  • Arreglada la compatibilidad con las versiones de desarrollo alpha más recientes de NVDA, donde las actualizaciones de complementos no se descargaban.

Versión 18.12.1

  • Añadidas traducciones.

Versión 18.12

  • Se pueden buscar actualizaciones de complementos deshabilitados. Permanecerán desactivados después de actualizarse.
  • Durante las actualizaciones, si un complemento necesita una versión de NVDA o de Windows específica, estas se comprobarán, y si alguna de ellas no encaja, se mostrará un mensaje de error y se abortará la actualización, dejando el complemento instalado sin modificar.
  • Cuando esté activada la búsqueda automática de actualizaciones y haya actualizaciones disponibles, NVDA te mostrará la lista de actualizaciones en lugar de preguntarte si quieres revisarlas.

Versión 18.10

  • Versión estable inicial (marcada todavía como prueba de concepto).

El complemento Windows 10 App Essentials, que mejora la accesibilidad de muchas aplicaciones en Windows 10, se actualiza a la versión 18.08. Los principales cambios de esta versión son:

  • Se ha añadido soporte para la nueva interfaz IUIAutomation6, garantizando que el complemento se adapte a NVDA 2018.3, donde probablemente este soporte irá ya integrado de serie.
  • En Windows 10 Redstone 5, se mejora el rendimiento de NVDA en algunas situaciones empleando funciones introducidas en IUIAutomation6, particularmente al cambiar entre aplicaciones cuando una tarea de larga duración se está ejecutando en segundo plano.
  • Se han actualizado diversas zonas del código para reflejar los cambios introducidos en 2018.
  • Al rastrear eventos, se registra el objeto que envió el evento.
  • Al rastrear eventos de notificación de UIA, se escuchará un tono con propósitos de depuración si la notificación viene desde otro lugar distinto de la aplicación actual.
  • Se procesan los submenús expandidos en lugares distintos al host de experiencia shell de Windows, ya que Microsoft Edge introduce un menú de este tipo en Redstone 5 (pulsando alt+x).
  • Se elimina el manejador personalizado para ciertos controles de reloj, alarmas y configuración, ya que su accesibilidad mejora en versiones recientes de Windows 10 y ya no es necesario.
  • Se añade soporte para las nuevas versiones de la aplicación Personas (mediante un módulo de aplicación).
  • Teclado moderno: al abrir los elementos del portapapeles en Redstone 5, NVDA ya no anunciará «Portapapeles», el título de la lista en cuestión.
  • Personas: NVDA ya vuelve a verbalizar sugerencias de búsqueda al buscar contactos en versiones recientes de la aplicación.

Después de ver todas estas novedades, actualizar es más que recomendable, ¿no crees? Puedes hacerlo desde el actualizador automático incluido en el complemento, o desde la página de información sobre Windows 10 App Essentials de nuestra web.
Por otro lado, Javi Domínguez ha liberado la versión 2.6-dev del complemento para el reproductor VLC Media Player. Esta es una versión de desarrollo, por lo que podría contener fallos. Sin embargo, en ella se soluciona un fallo que había cuando VLC se ejecutaba en pantalla completa, y se mejora el soporte para los cuadros de edición hechos con el motor de interfaces qt. De momento esta última mejora sólo es perceptible en VLC, pero quién sabe si en el futuro podría llegar a más lugares.
Descargar complemento para VLC 2.6-dev
¡Feliz domingo!

En este episodio, que ya tiene algún tiempo, se hace una introducción y se resuelven dudas comunes a la hora de dar el paso de Jaws a NVDA. No ha cambiado gran cosa desde que se publicó, salvo el nuevo diálogo de opciones. En él participan José María Ortiz, Daniel Montalvo, Juan Buño y José Manuel Delicado.
Visita la entrada con el episodio en la web de José María Ortiz
¡Que lo disfrutes!

Este complemento agrega sonidos a elementos comunes, tales como botones, cuadros de edición, casillas de verificación, ETC, reemplazando el anuncio del rol (tipo) de estos objetos por voz/Braille mediante sonidos. Es decir, en lugar de, por ejemplo, anunciar «botón» al navegar por uno, reemplaza el anuncio de la palabra botón por el sonido correspondiente al botón.
Los sonidos se reproducen en modo 3D, es decir, en sonido estéreo (izquierda/medio/derecha en los altavoces o los auriculares) según dónde esté el objeto en la pantalla.
Una vez instalado el complemento también será posible cambiar los sonidos que vienen de forma predeterminada por otros más personalizados. Esto se hace yendo a la carpeta de configuración de NVDA (%appdata%\NVDA en copias instaladas o UserConfig bajo el directorio de copias portables), luego a Addons>Unspoken>globalPlugins>Unspoken>sounds, y siempre y cuando los sonidos estén en .wav y tengan los mismos nombres de archivo de los sonidos originales.

¡Hola!
Ha pasado ya algún tiempo desde que abrimos la convocatoria para participar en el primer encuentro anual de la comunidad de NVDA en español, y desde entonces no habéis dejado de mostrar vuestro interés por este evento. En primer lugar, lo hemos fijado de manera provisional para los días 19, 20 y 21 de octubre, muy cerca del primer aniversario de esta web. En segundo lugar, hemos tomado la decisión de contaros, poco a poco, un poquito más sobre cada ponente de los que ya están confirmados. Haremos esto una vez a la semana, aproximadamente. Pero antes de empezar, me gustaría deciros que el servidor de Teamtalk vuelve a estar operativo, tras solucionar un insignificante error en la configuración que hacía imposible establecer conexión con él. Dicho esto, ¡allá vamos!
El ponente del que vamos a hablaros hoy es Jordi Montserrat. Desde tierras catalanas, viene con un proyecto con el que pretende hacer llegar la accesibilidad a las personas con discapacidad visual, pero aportando un enfoque distinto. Más concretamente, uno de sus objetivos es ayudar a aquellas personas sin discapacidad que nos acompañan, ya sea de forma puntual o permanente, a comprender bien conceptos tales como qué es un lector de pantalla y cómo funciona. NVDA, como no podía ser menos, tiene dedicada una sección bastante extensa en su web, que aunque mayoritariamente se encuentra en catalán, contiene partes en castellano. Si te apetece visitarla antes de la ponencia, entra a http://to.fundacio.coaatt.org/grup-de-treball-tecnologia-oberta/index/indice-de-paginas-en-castellano/.
Os recordamos que la convocatoria de participación sigue abierta hasta el 15 de septiemmbre.
Ir al formulario de registro

Otros avances

Además del encuentro, en estos últimos meses hemos estado ocupados con otras muchas tareas. La más importante, sin duda alguna, es la traducción del libro de formación básica de NVDA, que pondremos a vuestra disposición tan pronto como NV Access le dé el visto bueno. Para aquellos que conozcan el sitio web de NV Access, se trata de la primera de las «training guides». Los libros de Word, Excel y Outlook (cuando se publique) tampoco se van a quedar sin traducir, ya que nuestro objetivo es traeros todo el material posible en español. Estos libros estarán a la venta tanto en la web de NVAccess como en nuestra tienda.

¿Por qué últimamente no hay tantas actualizaciones de complementos?

Esta es una pregunta que nos habéis hecho mucho, y lo cierto es que no os faltan motivos. La respuesta es que, bien sea por vacaciones u otras razones, la comunidad internacional últimamente se está moviendo un poquito menos. Sin embargo, con la llegada de NVDA 2018.3 y WXPython 4, esperamos otra avalancha de actualizaciones. ¡Estad atentos!

Pronto llegarán más podcasts

Uno de los objetivos cuando creamos esta web era recopilar todos los podcasts en español que hablasen de NVDA, pero con la cantidad de complementos y actualizaciones que había lo fuimos dejando… hasta ahora. Pronto comenzaremos a publicar entradas recopilándolos. Algunos son ya algo antiguos, otros más recientes, pero a pesar de ello todos siguen siendo perfectamente válidos para conocer un poco más a fondo nuestro lector de pantalla. Si conocéis algún podcast que hable de NVDA y a lo mejor no ha tenido la difusión suficiente, no dudéis en contactar con nosotros.
¡Hasta la próxima!

Hoy llega la siguiente versión de Station Playlist Studio, la 18.08. Llega con la gran novedad de que solo será compatible con las versiones de NVDA a partir de la 2018.2, debido a que se cambia el diálogo de preferencias por un panel en el nuevo de Opciones. Además, también se añaden varios cambios y correcciones de fallos menores, como un nuevo botón para configurar las transcripciones de listas de reproducción, donde podrás ordenar las columnas del archivo resultante
Como siempre, puedes actualizar este complemento utilizando el método automático para ello o descargarlo manualmente desde los enlaces de arriba. Recuerda: es necesario que tengas la versión 2018.2.

Ayer se actualizaron tres complementos del sitio web oficial para añadir compatibilidad con WX Python 4. Son Golden Cursor (a la 3.1), Systray List (2.4) y Unicode Braille Input (3.9). Se puede actualizar a estas nuevas versiones sin miedo ya utilicemos el canal estable o el de alguna de las versiones de desarrollo, pues la compatibilidad con WX versión 3 se ha mantenido. Es importante actualizar a estas nuevas versiones ya que, probablemente, NVDA 2018.3 incorpore WX 4, con lo que versiones anteriores de estos complementos podrían no funcionar correctamente con la próxima actualización del lector.
Por otro lado, el autor de Clipspeak ha declarado la versión 1.0 de su complemento como estable, lo que significa que tiene un menor grado de errores y ha sido probada sin fallos significativos durante un tiempo. También ha aprovechado para corregir un error en su nombre de la documentación.
Si te has quedado con dudas, recuerda que estamos activos a través de una gran variedad de canales para que puedas planteárnoslas. En la parte inferior de esta página tienes nuestros perfiles en redes sociales y algunos enlaces a lugares de discusión relevantes en la comunidad, y en el menú principal el enlace a nuestro formulario de contacto por correo electrónico.
Si te gusta nuestro trabajo, plantéate hacer una donación.
Feliz domingo.

A la hora de programar un complemento que tiene algún tipo de interfaz gráfica, o hacer modificaciones a la propia interfaz de NVDA, todos los desarrolladores ciegos nos hacemos la misma pregunta tarde o temprano: ¿cómo se ve en pantalla esto que estoy programando? Podemos probar distintas combinaciones de constantes, posiciones y tamaños para los controles, pero al no poder verlos, probablemente el resultado no sea el que esperamos. En la entrada de hoy vamos a hablar del módulo guiHelper, disponible desde la versión 2016.4 de NVDA. La misión de este módulo es abstraernos un poco de los detalles más visuales del diseño de nuestra interfaz, de tal forma que sólo debamos preocuparnos de añadir controles y funcionalidad. El módulo no hace magia, pero nuestras interfaces quedarán probablemente un poquito mejor que antes. Si quieres conocer este módulo un poco más, sigue leyendo. ¡Allá vamos!
Nota: en este artículo se asume que el lector tiene conocimientos sobre la programación de complementos con interfaz gráfica.

Importar el módulo

El módulo guiHelper se encuentra en el paquete gui. Si nuestro complemento tiene interfaz gráfica, en algún momento seguramente habremos importado los módulos gui y wx, por lo que sólo haría falta escribir esto:
from gui import guiHelper
Una vez hecho esto, ya podremos acceder a sus constantes, funciones y clases.

Constantes de guiHelper

Estas constantes vienen incluidas directamente en el módulo.

  • BORDER_FOR_DIALOGS: es el borde que se encuentra alrededor de cada control dentro de un diálogo.
  • SPACE_BETWEEN_VERTICAL_DIALOG_ITEMS: cuando los elementos de un diálogo se disponen de manera vertical, esta constante se puede emplear para indicar cuánto espacio hay entre cada elemento.
  • SPACE_BETWEEN_BUTTONS_HORIZONTAL: especifica el espacio que hay entre botones dispuestos de manera horizontal.
  • SPACE_BETWEEN_BUTTONS_VERTICAL: igual que en el caso anterior, pero se aplica cuando los botones están dispuestos verticalmente unos sobre otros.
  • SPACE_BETWEEN_ASSOCIATED_CONTROL_HORIZONTAL: es el espacio que separa a dos controles relacionados dispuestos en horizontal.
  • SPACE_BETWEEN_ASSOCIATED_CONTROL_VERTICAL: lo mismo que en el caso anterior, pero en disposiciones verticales.

Funciones de guiHelper

A día de hoy, guiHelper sólo dispone de una función a nivel de módulo: associateElements. Esta función introduce dos controles en un objeto Sizer de wx, situándolos en horizontal o vertical y separándolos adecuadamente según su tipo. Su cabecera es la siguiente:
def associateElements( firstElement, secondElement)
Los controles deben pasarse en el orden en que queremos que se asocien. Las posibles asociaciones son:

  • wx.StaticText y wx.Choice, wx.TextCtrl o wx.Button: asocia una etiqueta con un cuadro combinado, un cuadro de edición o un botón, en disposición horizontal.
  • wx.StaticText y wx.ListCtrl o wx.ListBox o wx.TreeCtrl: asocia una etiqueta con una presentación en lista, un cuadro de lista o una vista en árbol, en disposición vertical.
  • wx.Button y wx.CheckBox: asocia un botón y una casilla de verificación, disposición horizontal.
  • wx.TextCtrl y wx.Button: asocia un cuadro de texto y un botón en posición horizontal.

En todos los casos, los controles deben ser objetos ya instanciados. La función devuelve el objeto Sizer que los contiene, listo para añadirlo a un diálogo u otro Sizer.

Clases de guiHelper

El módulo guiHelper dispone de cuatro clases que nos ayudan a construir nuestra interfaz. Aunque vamos a verlas todas, la que más se usa es BoxSizerHelper. Todas ellas tienen el atributo sizer, empleado al construir el resto de la interfaz.

La clase ButtonHelper

Esta clase sirve para añadir el espacio adecuado entre botones, tanto en horizontal como en vertical. Al instanciar objetos a partir de ella, se debe especificar la orientación del Sizer que va a generar, ya sea wx.VERTICAL o wx.HORIZONTAL. Por ejemplo:
bh=guiHelper.ButtonHelper(wx.VERTICAL)
Una vez construido el objeto, podemos agregar botones llamando al método addButton:
bh.addButton(mydialog, label=_("Test button 1"))
El método addButton construye un nuevo botón con los parámetros que le pasemos, o también puede añadir un botón previamente creado. Es imprescindible indicar en el primer caso el diálogo o ventana padre que contendrá al botón, y una etiqueta por razones de accesibilidad con el parámetro label. Al acabar, se devuelve el botón creado para que podamos hacer cosas con él, como asociarle acciones.

La clase LabeledControlHelper

Esta clase permite crear controles etiquetados y asociar etiqueta y control entre sí en un Sizer. Se apoya en la función associateElements que vimos más arriba. La cabecera de su constructor es:
def __init__(self, parent, labelText, wxCtrlClass, **kwargs)
Por lo tanto, para construir un objeto de tipo LabeledControlHelper necesitamos pasar como parámetros el diálogo o ventana padre, el texto de la etiqueta que acompañará al control, la clase del control (cuidado, aquí no valen controles previamente creados), y cualquier argumento que necesite el control para construirse. Veámoslo de forma más clara con un ejemplo:
lch=guiHelper.LabeledControlHelper(mydialog, "Selecciona una fruta", wx.Choice, choices=['pera', 'manzana', 'fresa'])
En el ejemplo anterior hemos pasado como clase wx.Choice para crear un cuadro combinado, y como parámetros adicionales las opciones que presentará.
La clase LabeledControlHelper dispone de dos atributos para que podamos trabajar cómodamente: sizer, igual que en el resto de clases, y control, que hace referencia al control de wx que hemos creado.

La clase PathSelectionHelper

Esta clase nos permite crear de una forma rápida, sencilla y abstrayéndonos de todos los detalles, un cuadro de edición y un botón «Examinar…» como los que aparecen en muchos programas, con el objetivo de que podamos fabricar un selector de rutas. En el constructor le pasamos el padre, como siempre, el texto del botón Examinar, y el título del diálogo que se desplegará para seleccionar una ruta cuando pulsemos dicho botón. Por ejemplo:
psh=guiHelper.PathSelectionHelper(mydialog, "Examinar...", "Selecciona la carpeta que contiene los documentos")
Como en los casos anteriores, tenemos la propiedad sizer, pero además aquí nos acompaña otra: pathControl, que contiene una referencia al cuadro de texto donde está escrita la ruta.
En caso de que sea necesario, se podría crear una clase que herede de esta y sobreescribir o extender los métodos getDefaultBrowseForDirectoryPath y onBrowseForDirectory. El primero devuelve la ruta por defecto que muestra el diálogo de seleccionar carpeta, y el segundo muestra este diálogo y almacena el resultado en el cuadro de edición.

La clase BoxSizerHelper

Llegamos a la clase más importante de este módulo, la más usada, y la que emplea la funcionalidad expuesta en casi todas las otras. BoxSizerHelper permite configurar la disposición interna de un objeto Sizer. La cabecera de su constructor es:
def __init__(self, parent, orientation=None, sizer=None)
Como siempre, el primer argumento que espera recibir es la ventana padre. Después, podemos pasar una orientación (wx.VERTICAL o wx.HORIZONTAL), en cuyo caso se creará internamente un objeto Sizer, o un Sizer ya creado, a ser posible vacío. Si pasamos ambos parámetros, se produce un error.
Al igual que sucede en los casos anteriores, tenemos un atributo sizer. Esta clase, además, presenta los siguientes métodos:

  • addItem(self, item, **keywordArgs): añade un control wx ya creado y lo sitúa adecuadamente. El último argumento es opcional y sólo se usa en raras ocasiones. El método devuelve el elemento que se pasa como parámetro, para que podamos asociarle acciones y hacer otras cosas con él.
  • addLabeledControl(self, labelText, wxCtrlClass, **kwargs): añade un control etiquetado. El primer parámetro que recibe es el texto con la etiqueta del control, seguido de la clase del control y los parámetros adicionales que se quieran pasar. Fíjate en el ejemplo anterior del cuadro combinado. Este método devuelve el control que se acaba de agregar.
  • addDialogDismissButtons(self, buttons): agrega y alinea los botones Aceptar, Cancelar y Aplicar de los diálogos estándar. Este método debería llamarse cuando ya se han añadido todos los demás controles. Buttons puede ser un objeto wx.Button, un objeto wx.Sizer o un objeto guiHelper.ButtonHelper. Devuelve el mismo objeto que se le pasa como parámetro.

Aplicaciones prácticas

Al igual que en una entrada anterior, vamos a poner como ejemplo el complemento Enhanced Aria (aunque esta vez no vendrá solo), para demostrar lo fácil que es adaptar nuestros complementos para que se apoyen en guiHelper. En la versión 1.3, para agregar la primera casilla de verificación del diálogo de ajustes de aria mejorada, se hacía esto:
self.bannerenabled=wx.CheckBox(self, wx.NewId(), label=(u"Report banners")) # Como self es una clase que hereda de wx.Dialog, se pasa como padre
self.bannerenabled.SetValue(config.conf['aria']['reportBanner']) # Se establece el valor de la casilla

sizer.Add(self.bannerenabled,border=10,flag=wx.BOTTOM) # se añade la casilla sizer
Como se puede comprobar, hay que crear la casilla con su etiqueta correspondiente, asignarle el valor adecuado y añadirla al objeto que va a contenerla, con indicadores de borde y alineación. Sin embargo, en la versión 2.0 basta con hacer esto:
def createSettings(obj, sizer):
helper=guiHelper.BoxSizerHelper(obj, sizer=sizer)
obj.bannerenabled=helper.addItem(wx.CheckBox(obj, wx.NewId(), label=
("Report banners")))
obj.bannerenabled.SetValue(config.conf['aria']['reportBanner'])

Como se puede ver, creamos un BoxSizerHelper pasando como parámetro el Sizer que nos dan en el método makeSettings, y que en el caso particular de esta implementación se pasa a createSettings. A continuación, agregamos una nueva casilla de verificación llamando a addItem, y luego establecemos su valor.
Veamos el diálogo de Windows 10 App Essentials, que también se apoya en este módulo. Lo podemos encontrar en el archivo w10config.py. Se trata de un diálogo completo, una clase que hereda de wx.Dialog. Por lo tanto, construirlo implica más esfuerzo, al no tener a nuestra disposición la clase SettingsDialog de NVDA o la clase SettingsPanel. En lugar del método makeSettings, que ya nos da un Sizer, las operaciones de construcción se hacen en el constructor del diálogo.
En primer lugar, se crea un objeto de tipo BoxSizer:
mainSizer = wx.BoxSizer(wx.VERTICAL)
Y a continuación, se crea un BoxSizerHelper con un Sizer nuevo, que será hijo del que se acaba de crear:
w10Helper = gui.guiHelper.BoxSizerHelper(self, orientation=wx.VERTICAL)
Teniendo el BoxSizerHelper, ya se pueden añadir controles. Vamos a ver dos de ellos, la casilla de verificación y el cuadro combinado.
self.autoUpdateCheckbox=w10Helper.addItem(wx.CheckBox(self,label=_("Automatically check for add-on &updates"))) # Se crea la casilla
self.autoUpdateCheckbox.SetValue(config.conf["wintenApps"]["autoUpdateCheck"]) # Se establece su valor
labelText = _("&Add-on update channel:") # Etiqueta del cuadro combinado
self.channels=w10Helper.addLabeledControl(labelText, wx.Choice, choices=["development", "stable"]) # Cuadro combinado

Ya para acabar, se añaden los botones Aceptar y cancelar, y se hace de una forma muy particular, ya predefinida en wx:
w10Helper.addDialogDismissButtons(self.CreateButtonSizer(wx.OK | wx.CANCEL))
En este caso no existe acceso directo a los botones, como sí pasa con el resto de los controles, así que las asociaciones se hacen de esta manera:
self.Bind(wx.EVT_BUTTON, self.onOk, id=wx.ID_OK)
self.Bind(wx.EVT_BUTTON, self.onCancel, id=wx.ID_CANCEL)

El BoxSizerHelper ya está completo, hay que añadirlo al Sizer principal. Una vez más, se pide ayuda a guiHelper, y al propio motor wx para centrarlo y posicionarlo:
mainSizer.Add(w10Helper.sizer, border=gui.guiHelper.BORDER_FOR_DIALOGS, flag=wx.ALL)
mainSizer.Fit(self)
self.Center(wx.BOTH | (wx.CENTER_ON_SCREEN if hasattr(wx, "CENTER_ON_SCREEN") else 2))

Conclusión

Es importante que nuestros complementos e interfaces gráficas en general sean visualmente usables. Aunque NVDA es un lector de pantalla empleado mayoritariamente por personas con discapacidad visual, estas personas suelen estar acompañadas por otras que ven perfectamente, especialmente cuando se introducen en el mundo de la informática. Por tanto, debemos tener en cuenta a todos los posibles usuarios.
En esta entrada hemos conocido el módulo guiHelper, que nos ayuda precisamente en esta tarea. GuiHelper no hace magia, no tiene ningún tipo de «inteligencia artificial» que coloque nuestros controles exactamente como deberían estar para que nuestra interfaz sea atractiva. Sin embargo, nos ayuda un poco a conseguirlo, simplifica nuestro código y por lo tanto facilita el mantenimiento.
Si tus complementos no se apoyan todavía en este módulo, no esperes más para adaptarlos. Tus usuarios lo agradecerán, ¡y tú también!