5 votos

Cancelar evento en las herramientas de Python Gp con arcpy

En GP-herramientas escrita en C# (ArcObjects) podemos escuchar la cancelación del evento y de reaccionar a eso. Me pregunto si hay algo similar en Python GP-herramientas de la aplicación de arcpy. Busqué en google el tema y lo único que encontré fue la de Cancelar el método en el Resultado-Objeto, de modo que usted puede pedir que el estado de el resultado de un GP-herramienta, es decir, si fue cancelado). Soy consciente de que usted puede cancelar GP-herramientas que se ejecutan en segundo plano en la Ventana de resultados, pero esta Cancelar el evento es apresado por el sistema y por lo tanto el desarrollador o la GP-herramienta no puede reaccionar a eso. Gracias de antemano!

2voto

saint_groceon Puntos 2696

Esto no es una respuesta, sino una elaboración sobre la cuestión. He publicado un servicio asíncrono de gp usando el código que se muestra a continuación. Si el usuario cancela, el objeto de resultado devuelto indica que. Sin embargo, el bucle se ejecuta durante el número completo de segundos. Me gustaría salir del bucle si el usuario ha cancelado.

 def execute(self, parameters, messages):
    secondstosleep  = int(parameters[0].valueAsText)
    output = parameters[1].valueAsText

    if secondstosleep < 0:
        messages.addErrorMessage("{0} : less than zero.".format(secondstosleep))
        raise arcpy.ExecuteError
    messages.addMessage("starting to sleep for {0} seconds".format(secondstosleep))
    slept = 0
    for t in xrange(0,secondstosleep):
        # would like to break if user has canceled
        # check for cancel here and break
        slept = slept + 1
        time.sleep(1)
    messages.addMessage("slept for {0} seconds".format(slept))
    return
 

1voto

Farid Cher Puntos 5306

La única manera en que puedo pensar es en el uso de Progressor en Arcpy. Utilizando Progressor una vez que el usuario presione el botón de cancelar el bucle se rompe. A continuación, puede comprobar el objeto de resultado para ver si es cancelado por el usuario. He aquí un ejemplo de código:

 def execute(self, parameters, messages):
    import time
    n=30
    p=1
    arcpy.SetProgressor("step",
                        "Step progressor: Counting from 0 to {0}".format(n),
                        0, n, p)
    loopTime=.3
    for i in range(n):
        if (i % p) == 0:
            ##            # would like to break if user has canceled
            arcpy.SetProgressorLabel("Iteration: {0}".format(i))
            arcpy.SetProgressorPosition(i)
            #print(i)
            time.sleep(loopTime)

    arcpy.SetProgressorLabel("Iteration: {0}".format(i + 1))
    arcpy.SetProgressorPosition(i + 1)
    return
 

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X