Résumé
The filter object allows you to specify the choices available for a parameter.
Discussion
L'objet filter vous permet de spécifier les choix disponibles pour un paramètre. Par exemple, vous pouvez définir un filtre de champ qui limite les choix uniquement aux champs de texte. Un filtre effectue trois tâches :
- Un filtre présente uniquement à l'utilisateur les choix valides lors de la recherche de données. Si vous définissez votre filtre pour les classes d'entités ponctuelles, seules les classes d'entités ponctuelles sont montrées à l'utilisateur lors de la recherche de données. Si vous définissez votre filtre pour les champs de texte, la liste déroulante des champs affiche uniquement les champs de texte.
- Si un utilisateur saisit une valeur de paramètre (plutôt que de sélectionner une valeur dans la liste ou l'explorateur de fichiers), la valeur est comparée au filtre. Si l'utilisateur saisit une valeur incorrecte (un champ numérique au lieu d'un champ de texte, par exemple), un avertissement ou une erreur est automatiquement générée.
- Les valeurs étant comparées à leur filtre par validation interne, un filtre vous évite de devoir programmer votre propre validation personnalisée dans la classe ToolValidator.
Il existe deux façons de spécifier des filtres :
- Dans l'onglet Paramètres de la boîte de dialogue des propriétés de l'outil, cliquez sur le paramètre, puis cliquez sur la cellule située en regard de Filter et sélectionnez le type de filtre dans la liste déroulante. Après avoir sélectionné le type de filtre, une boîte de dialogue s'ouvre, dans laquelle vous spécifiez les valeurs pour le filtre.
- Vous pouvez définir les valeurs à l'aide d'un programme dans une classe ToolValidator (voir les exemples ci-dessous). Le géotraitement crée automatiquement des filtres pour les paramètres de type chaîne, long, double, classe d'entités, fichier, champ et espace de travail. Même si vous ne sélectionnez pas de filtre dans la boîte de dialogue des propriétés de l'outil, il y a toujours un filtre associé au paramètre, mais il est vide. Un filtre vide équivaut à n'avoir aucun filtre. En ajoutant des valeurs à un filtre vide, vous activez le filtre, et les choix de l'utilisateur sont limités par le contenu du filtre.
Propriétés
Propriété | Explication | Type de données |
list (Lecture/écriture) | If you do not want to filter values, set the list property to an empty list. The datatype specified depends on the filter type (ValueList, Range, FeatureClass, File, Field, and Workspace). | String |
type (Lecture/écriture) | The type of filter (ValueList, Range, FeatureClass, File, Field, and Workspace). You can set the type of filter when dealing with Long and Double parameters. For other types of parameters, there is only one valid type of filter, so setting the type on these parameters is ignored. If you do not want to filter values, set the List property to an empty list. | String |
Exemple de code
Filter example
An example of dynamically updating a Value List Filter containing a choice list of keywords. If the user enters "OLD_FORMAT" in the second parameter, the third parameter contains "POINT, LINE, and POLYGON". If "NEW_FORMAT" is entered, the third parameter contains three additional choices.
import arcpy
class ToolValidator:
def __init__(self):
self.params = arcpy.GetParameterInfo()
def initializeParameters(self):
return
def updateParameters(self):
# Provide default values for "file format type" and
# "feature type in file"
if not self.params[1].altered:
self.params[1].value = "OLD_FORMAT"
if not self.params[2].altered:
self.params[2].value = "POINT"
# Update the value list filter of the "feature type in file"
# parameter depending on the type of file (old vs. new format)
# input
if self.params[1].value == "OLD_FORMAT":
self.params[2].filter.list = ["POINT", "LINE", "POLYGON"]
elif self.params[1].value == "NEW_FORMAT":
self.params[2].filter.list = ["POINT", "LINE", "POLYGON",
"POINT_WITH_ANNO",
"LINE_WITH_ANNO",
"POLYGON_WITH_ANNO"]
return
def updateMessages(self):
return
Filter example 2
An example where the Value List Filter in the second parameter changes based on the shape type found in the first parameter, a feature class.
def updateParameters(self):
# Update the value list filter in the second parameter based
# on the shape type in the first parameter
string_filter = self.params[1].filter
feature_class = self.params[0].value
if feature_class:
shape_type = arcpy.Describe(feature_class).shapeType
if shape_type in ["Point", "Multipoint"]:
string_filter.list = ["RED", "GREEN", "BLUE"]
elif shape_type == "Polygon":
string_filter.list = ["WHITE", "GRAY", "BLACK"]
else:
string_filter.list = ["ORANGE", "INDIGO", "VIOLET"]
else:
string_filter.list = ["RED", "GREEN", "BLUE"]
# If the user hasn't changed the keyword value, set it to the
# default value (first value in the value list filter).
if not self.params[1].altered:
self.params[1].value = string_filter.list[0]
return