¿Configurando la lista desplegable en la herramienta de script Parámetros de Python?

10

Estoy tratando de crear una herramienta a partir de un script de Python que he escrito que tomará una lista que he creado y la usará como un menú desplegable en la herramienta terminada como una de las entradas (ver imagen adjunta, por ejemplo):

ingrese la descripción de la imagen aquí

La lista que estoy usando es una lista grande que incluye todas las ciudades en el estado de Vermont, y la genero en el script a partir de una tabla (vea el código a continuación). Sospecho que mi problema en este momento es simplemente configurar las propiedades de la herramienta para tomar esta lista y usarla para crear una lista desplegable para el usuario. Aquí está el bloque de código que crea la lista para usar en el parámetro: ¿alguien ve algún problema con este código final de la herramienta?

import arcpy
arcpy.env.workspace = "Z:\\OPS\\TechnicalServices\\Culverts\\GetCulverts\\GetCulverts.gdb"
towns = "Database Connections\\GDB_GEN.sde\\GDB_Gen.VTRANS_ADMIN.townindex"
arcpy.MakeFeatureLayer_management(towns,"towns_lyr")

NameList = []
NameListArray = set()
rows = arcpy.SearchCursor("towns_lyr")
for row in rows:
    value = row.getValue("TOWNNAME")
if value not in NameListArray:
    NameList.append(value)
town = NameList

town = arcpy.GetParameterAsText(0)

Aquí también hay una imagen de las propiedades de la herramienta, con el código de validación predeterminado: ¿necesito modificar este código de validación?

Busqué información sobre cómo alterar este código de validación, pero no pude encontrar información sobre cómo usarlo para formatear listas desplegables.

ingrese la descripción de la imagen aquí

GISdan
fuente

Respuestas:

7

Intente configurar el código de clase del validador de herramientas para esto:

import arcpy
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()

  def initializeParameters(self):
    """Refine the properties of a tool's parameters.  This method is
    called when the tool is opened."""
    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."""
    towns = "Database Connections\\GDB_GEN.sde\\GDB_Gen.VTRANS_ADMIN.townindex"
    rows = arcpy.SearchCursor(towns)
    self.params[0].filter.list = sorted(list(set(r.getValue('TOWNNAME') for r in rows)))
    del rows
    return

  def updateMessages(self):
    """Modify the messages created by internal validation for each tool
    parameter.  This method is called after internal validation."""
    return
crmackey
fuente