Scripting en gvSIG: Barra de estado

taskbar01Durante estos días, voy a ir explicando por partes el post que publicó Joaquin del Cerro esta semana sobre: “Validar las geometrías de una capa”, ya que tiene mucho donde sacar y funciones que os pueden ser útiles por separado.

Será necesario para seguir los próximos post tener una de las últimas versiones de gvSIG, de la build 2231 o superior, aunque para el post de hoy no creo que haya problema con la versión.

Para empezar, vamos a ir con una de las partes más sencillas que viene muy bien para cuando lancéis geoprocesos largos que requieran de muchos cálculos o trabajen con gran cantidad de entidades, cómo crear una barra de estado. Esta barra aparecerá abajo a la derecha en nuestra pantalla principal de gvSIG 2.

La barra de estado nos permitirá monitorizar nuestro script, cuanto llevamos calculado y cuanto nos queda por calcular, de una manera visual. Pero tenemos que saber colocarla en nuestro código para un buen uso.

El código para que funcione es sencillo y no necesitamos importar ninguna librería para utilizarla. Los pasos básicos a seguir son:

  • Creamos la barra: taskStatus.add()
  • Establecemos su rango, la longitud que va a tener: taskStatus.setRangeOfValues(0, 1000)
  • Vamos dando valores a la barra para que avance: taskStatus.setCurValue( valorContador )
  • Terminamos : taskStatus.terminate()
  • ..y eliminamos la barra: taskStatus.remove()

Por lo general, uno de los usos principales (que puede tener muchos otros que se os ocurran), utilizaremos la barra de estado cuando tengamos un bucle en nuestro código de gran tamaño y situaremos ahí el contador que nos dará valores a la barra de estado.

Un ejemplo, voy a hacer un pequeño script que muestre por consola los valores de todas las entidades de nuestra capa (que en este caso en mi capa de prueba son 1193 entidades, y aparecerá como en la imagen que abre el post).

Primero, añadiremos la barra de estado con taskStatus.add(), una vez esto, ya podemos trabajar con ella. Pero también, tenemos que establecer la longitud que debe de tener. En este caso, lo que tenemos que hacer es sacar cuantas entidades tiene nuestra capa, porque será este dato del que nos interese llevar la cuenta.

Entonces, creamos una variable contador para que lleve la cuenta del número de iteraciones que lleva el bucle, y este valor es el que pasaremos a la barra de estado, y la situamos dentro del bucle para que modifique la barra con .setCurValue(i)

Una forma de hacerlo es poniendo todo dentro de una estructura try/finally. Esta estructura nos permite lidiar con posibles errores que aparezcan en el código, y que pase lo que pasa, se produzca un error o no, la parte dentro de finally: se ejecutará de todas maneras, así nos aseguramos de cerrar siempre la barra de estado.


from gvsig import currentLayer

def main(*args):
    """ Barra de estado """

    try: #Si se produce un error, ejecuta la parte finally:
        taskStatus.add() #Añadimos la barra
        rango = currentLayer().features().getCount()
        taskStatus.setRangeOfValues(0, rango) #Establecemos su rango

        i = 0 #Contador para la barra de estado
        for feature in currentLayer().features():
            taskStatus.setCurValue(i) #Establece el valor
            print feature.getValues()
            i += 1 #Incrementa el valor

    finally: #Pase lo que pase (error o no) se ejecuta esta parte
        taskStatus.terminate() #Terminamos y..
        taskStatus.remove() #.. eliminamos la barra

 

Espero que os sea de utilidad y podáis implementarlo en vuestros scripts.

Agradecer a Joaquin del Cerro por publicar este tipo de post con nuevas funcionalidades y de mayor complejidad.

1 comentario

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: