[Gvsig_usuarios] Script con barra de progreso

Joaquin Jose del Cerro Murciano jjdelcerro en gvsig.org
Mar Feb 24 06:25:46 CET 2015


El 23 de febrero de 2015, 13:50, Ovidio Ribeira <alboredos en hotmail.es>
escribió:

>  Saludos, al vincular un botón de un script de dialogo con un geproceso
> que muestra una barra de estado  me aparece el siguiente erros:
> “NameError: global name 'taskStatus' is not defined in <script>  “.  Si
> el geoproceso lo realizo desde fuera del script de dialogo si que me
> funciona, ¿Cuál es el problema?, yo no lo doy solucionado.
>

Hola Ovidio,
Te contesto de memoria, si algo te falla avisame y te lo miro con mas
detalle.

Cuando se ejecuta un script este se ejecuta en un hilo aparte de ejecucion
y entonces se le asocia de forma automatica un TaskStatus. Ahora bien, al
lanzar un dialogo, no se lanza en un hilo de ejecucion aparte, no tiene
mucho sentido ya que estos deben ejecutarse en el hilo pricipal de java, y
entonces no se le asocia ningun TaskStatus.

Si en una accion asociada a un boton vas a ejecutar un codigo que precisa
un TaskStatus puedes crearlo manualmente con algo como:


def miEvento():
  from gvsig import ToolsLocator
  taskStatus =
ToolsLocator.getTaskStatusManager().createDefaultSimpleTaskStatus("Mi
proceso")
  # Añadimos el taskStatus a la barra de estado de gvSIG
  taskStatus.add()
  try:

    ... mi codigo...

    taskStatus.terminate()
  except Exception,e:
    taskStatus.abort()
    raise e

Es importante que no te deje el terminate/abort si no se quedara por siempre
el taskStatus en la barra de estado de gvSIG.

De todos modos si lo haces asi, aunque tendras una barra de progreso,
mientras tu
evento se este ejecutando gvSIG quedara bloqueado. Asi que si es un proceso
largo,
no es la mejor forma de lanzarlo. Seria mas optimo algo como:


def miEvento():
   from gvsig import runTask
   runTask("Mi proceso", miProceso)

def miProceso(taskStatus):
   ... el codigo de mi proceso ...

De esta forma tu proceso se ejecutara en un hilo aparte de ejecucion
dejando que
el usuario pueda interactuar con gvSIG mientras este se va ejecutando. Eso
si, tendras
que deshabilitar el boton que lanza tu procesos al entrar en el y
habilitarlo al
terminar para evitar que el usuario empieze a darle muchas veces y vaya
lanzando
la ejecucion de tu proceso en varios hilos paralelos.

Espero que te sirva.

Un saludo
Joaquin



> Gracias.
>
> _______________________________________________
> gvSIG_usuarios mailing list
> gvSIG_usuarios en listserv.gva.es
>
> Para ver histórico de mensajes, editar sus preferencias de usuario o darse
> de baja en esta lista, acuda a la siguiente dirección:
>
> http://listserv.gva.es/cgi-bin/mailman/listinfo/gvsig_usuarios
>
>


-- 
--------------------------------------
Joaquin Jose del Cerro Murciano
Development and software arquitecture manager at gvSIG Team
jjdelcerro en gvsig.com
jjdelcerro en gvsig.org
gvSIG Association
www.gvsig.com
www.gvsig.org
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: http://listserv.gva.es/pipermail/gvsig_usuarios/attachments/20150224/430a5c74/attachment.htm 


Más información sobre la lista de distribución gvSIG_usuarios