3 votos

¿Cómo introducir valores de cadena personalizados en el parámetro GPString multiValue en la caja de herramientas de python 10.4?

Estoy intentando poder añadir una lista de años (o periodos de retorno) a una herramienta de python que quiero crear. En la función getParametersInfo, actualmente estoy configurando un parámetro como "GPString" y quiere que sea una lista multivalores. Este es mi código actual:

import arcpy
class Toolbox(object):
    def __init__(self):
        self.label = "Toolbox"
        self.alias = ""
        # List of tool classes associated with this toolbox
        self.tools = [TestParameters]
class TestParameters(object):
    def __init__(self):
        self.label = "TestParameters"
        self.description = ""
        self.canRunInBackground = False
    def getParameterInfo(self):
        param0 = arcpy.Parameter(
                    displayName ='Do Nothing Here:',
                    name ='in_features',
                    datatype ="GPFeatureLayer",
                    parameterType ='Required',
                    direction ='Input')
        param1 = arcpy.Parameter(
                    displayName ='Enter Return Periods as Years',
                    name ='tbl_features',
                    datatype = "GPString", #"GPValueTable", #"GPTableView", #"DETable", #
                    parameterType ='Required',
                    direction ='Input',
                    multiValue=True)
        param1.filter.type = "ValueList"
        param1.filter.list = []
        params = [param0,param1]
        return params
    def isLicensed(self):
        return True
    def updateParameters(self, params):
        param1.filter.list = []
        return
    def updateMessages(self, params):
        return
    def execute(self, params, messages):
        arcpy.AddMessage("Testing Tool, nothing here yet")
        arcpy.AddMessage(params[1].valueAsText)
        return  

Sin embargo, cuando saco la herramienta en ArcCatalog y abro el prompt de la herramienta me sale una caja vacía. Me lo esperaba, pero el botón "Añadir valor" no me permite añadir ningún valor. Me gustaría añadir valores de años como "2" , "5" , "10" , "100" , "500" ...y etc...

¿Me estoy perdiendo algo que debería ir dentro de la función updateParameters? ¿O hay alguna forma de habilitar el botón "Add Value"? Sería bueno no tener que codificar los valores de los años, ya que otros pueden utilizar este script más tarde y pueden tener diferentes años que necesitan para la entrada. Por eso dejé la función param1.filter.list = [] como una lista en blanco, ya que la documentación de ESRI para ella no cubre cómo introducir valores después de abrir la herramienta.

¿O hay algún otro tipo de parámetro que pueda hacer esto fácilmente? He probado los valores comentados en la línea de tipo de datos para param1 . Si alguno de ellos funciona, ¿cuál podría ayudarme a personalizarlo?

1voto

Alex Tereshenkov Puntos 13433

Me parece que esto es contraintuitivo, yo haría justo lo que has hecho hasta ahora. Desgraciadamente, la única forma de evitar este problema (cuando no quieres presentar a tus usuarios la lista de años existente) es utilizar el ValueTable con una sola columna. Al principio parece una chapuza, pero funciona bien.

La herramienta después de algunos años se han añadido:

enter image description here

El código de la herramienta después de las modificaciones. Sólo se han eliminado todos los ajustes de los filtros y se ha añadido la definición de las columnas de la tabla de valores.

import arcpy
class Toolbox(object):
    def __init__(self):
        self.label = "Toolbox"
        self.alias = ""
        # List of tool classes associated with this toolbox
        self.tools = [TestParameters]

class TestParameters(object):
    def __init__(self):
        self.label = "TestParameters"
        self.description = ""
        self.canRunInBackground = False
    def getParameterInfo(self):
        param0 = arcpy.Parameter(
                    displayName ='Do Nothing Here:',
                    name ='in_features',
                    datatype ="GPFeatureLayer",
                    parameterType ='Required',
                    direction ='Input')
        param1 = arcpy.Parameter(
                    displayName ='Enter Return Periods as Years',
                    name ='tbl_features',
                    datatype = "GPValueTable", #"GPValueTable", #"GPTableView", #"DETable", #
                    parameterType ='Required',
                    direction ='Input',
                    multiValue=True)
        param1.columns =([["GPString", "Period as year"]])
        params = [param0,param1]
        return params
    def isLicensed(self):
        return True
    def updateParameters(self, params):
        return
    def updateMessages(self, params):
        return
    def execute(self, params, messages):
        arcpy.AddMessage("Testing Tool, nothing here yet")
        arcpy.AddMessage(params[1].valueAsText)
        return

La salida después de hacer clic en OK :

Testing Tool, nothing here yet 2016;2017;2018

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