¿Puede ArcPy llenar formularios en la interfaz de complementos?

8

Estoy tratando de construir una herramienta ArcPy, que le pedirá al usuario que ingrese cierta información (ID, Nombre, Dirección, Zip, etc.) primero. Mi interfaz de complemento se muestra a continuación, y espero implementar que una vez que el usuario ingrese la ID, si toda la otra información relacionada (Nombre, Dirección, etc.) existe en otra tabla conocida, podría mostrarse en los siguientes espacios en blanco en Al mismo tiempo, en lugar de dejar que el usuario escriba todo.

En resumen, ¿puede ArcPy llenar formularios en la interfaz del complemento, no en la ventana de resultados?

ingrese la descripción de la imagen aquí

La validación funciona, pero extremadamente lenta cuando ejecuto un cursor de búsqueda en un .dbf que tiene más de 160,000 registros. ¿Cómo puedo mejorar el código a continuación, o hay una mejor solución que no sea usar la herramienta de script de Python? Parece que el formulario volverá a pasar por el cursor incluso después de llenar otros espacios en blanco no relacionados.

import arcpy, datetime
import os
import sys
class ToolValidator(object):
  """Class for validating a tool's parameter values and controlling
  the behavior of the tool's dialog."""

  def __init__(self):
    """Setup arcpy and the list of tool parameters."""
    self.params = arcpy.GetParameterInfo()
    fc = "C:\\test\\vectorDBO.dbf"
    field = "PARCEL"
    cursor = arcpy.SearchCursor(fc)
    row = cursor.next()
    n = 0
    while row:
        if row.getValue("PARCEL") == self.params[0].value:
            self.params[1].value = row.getValue("LASTNM")
            self.params[3].value = row.getValue("ADDRESS")
            self.params[4].value = row.getValue("CITY")
            self.params[6].value = row.getValue("ZIPCODE")
            break
        row = cursor.next()

  def initializeParameters(self):
    """Refine the properties of a tool's parameters.  This method is
    called when the tool is opened."""
    self.params[10].value = datetime.datetime.now()
    return

  def updateParameters(self):
    """Modify the values and properties of parameters before internal
    validation is performed.  This method is called whenever a parameter
    has been changed."""
    return

  def updateMessages(self):
    """Modify the messages created by internal validation for each tool
    parameter.  This method is called after internal validation."""
    return
Bacalao Energético
fuente
44
¿Has mirado en la validación de herramientas personalizadas ? Se puede usar para llenar campos basados ​​en otros campos.
Barbarroja
1
Está utilizando el cursor de estilo antiguo, desea utilizar el nuevo y más rápido buscador en el módulo da , esto debería resolver el problema de la velocidad.
Hornbydd
¡Gracias por tu sugerencia! Convierto la tabla como un archivo .csv y uso SearchCursor (arcpy.da), ¡y funciona perfectamente!
Bacalao energético
Publicación anterior, pero encontré un problema similar cuando estaba creando un complemento. Querrá usar el sabor .da del buscador de búsqueda, y también usar un formato de datos que sea más amigable con el sistema, como csv o xlsx.
COCO

Respuestas:

4

Nunca he usado Python Addins, pero la interfaz que describe es una herramienta de script. Aquí encontrará una discusión sobre cómo llamar a las herramientas de Script desde Addins . Como comenta @Barbarossa arriba, puede usar la validación de herramientas para completar los parámetros. A menos que haya una razón específica para crear un complemento de Python, probablemente me apegaría a crear una herramienta de secuencia de comandos de Python .

Hornbydd
fuente
1
@EnergeticCodfish Si esto resolvió su problema, ¿puede hacer clic en el botón verde Aceptar, por favor?
PolyGeo