Configuration de la liste déroulante dans Paramètres de l'outil de script Python?

10

J'essaie de créer un outil à partir d'un script python que j'ai écrit qui prendra une liste que j'ai créée et l'utilisera comme menu déroulant dans l'outil fini comme l'une des entrées (voir l'image ci-jointe par exemple):

entrez la description de l'image ici

La liste que j'utilise est une grande liste qui inclut toutes les villes de l'état du Vermont, et je la génère dans le script à partir d'une table (voir le code ci-dessous). Je soupçonne que mon problème pour le moment est simplement de définir les propriétés de l'outil pour prendre cette liste et l'utiliser pour créer une liste déroulante pour l'utilisateur. Voici le bloc de code qui crée la liste à utiliser dans le paramètre - est-ce que quelqu'un voit des problèmes avec cette fin de code de l'outil?

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)

Voici également une image des propriétés de l'outil, avec le code de validation par défaut - dois-je modifier ce code de validation?

J'ai cherché des informations sur la modification de ce code de validation, mais je n'ai pas pu trouver d'informations sur son utilisation pour le formatage des listes déroulantes.

entrez la description de l'image ici

GISdan
la source

Réponses:

7

Essayez de définir le code de classe de l'outil de validation sur ceci:

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
la source