Konfigurujesz listę rozwijaną w parametrach narzędzia skryptu Python?

10

Próbuję utworzyć narzędzie ze skryptu napisanego przeze mnie w języku Python, który pobierze utworzoną przeze mnie listę i użyje jej jako menu rozwijanego w gotowym narzędziu jako jednego z danych wejściowych (patrz na przykład załączony obraz):

wprowadź opis zdjęcia tutaj

Lista, której używam, jest dużą listą zawierającą wszystkie miasta w stanie Vermont i generuję ją w skrypcie z tabeli (patrz kod poniżej). Podejrzewam, że mój problem polega właśnie na ustawieniu właściwości narzędzia, aby pobrać tę listę i użyć jej do utworzenia listy rozwijanej dla użytkownika. Oto blok kodu, który tworzy listę do użycia w parametrze - czy ktoś widzi jakieś problemy z tym końcem kodu narzędzia?

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)

Oto obraz właściwości Narzędzia wraz z domyślnym kodem weryfikacyjnym - czy muszę zmienić ten kod weryfikacyjny?

Szukałem informacji na temat zmiany tego kodu weryfikacyjnego, ale nie mogłem znaleźć informacji na temat używania go do formatowania list rozwijanych.

wprowadź opis zdjęcia tutaj

GISdan
źródło

Odpowiedzi:

7

Spróbuj ustawić kod klasy walidatora narzędzi na:

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
źródło