Filter

摘要

filter 对象允许为参数指定用户可用的选择。

说明

Filter 对象允许为参数指定用户可用的选择。 例如,可设置字段过滤器将选择限制为文本字段。 过滤器执行三项工作:

  • 用户浏览数据时,过滤器仅提供有效的选择。 如果将过滤器设置为点要素类,则用户浏览数据时仅显示点要素类。 如果将过滤器设置为文本字段,则字段下拉列表仅显示文本字段。
  • 如果用户键入了参数值(而不是从列表或文件浏览器中选择值),则系统会将该值与过滤器进行比较。 如果用户输入的值无效(例如数值字段而不是文本字段),将出现警告或错误。
  • 由于将通过内部验证将值与其过滤器进行比较,因此无需对 ToolValidator 类中的自定义验证进行编程。

可通过两种方式指定过滤器:

  • 在工具的属性对话框的参数选项卡上,单击参数,然后单击“过滤器”旁的单元格,再从下拉列表中选择过滤器类型。 选择过滤器类型之后,将显示一个对话框,可在其中指定过滤器的值。
  • 可以编程的方式在 ToolValidator 类中设置值(示例如下所示)。 这将提供一些使用工具的属性对话框无法实现的自定义选项,包括定义基于其他参数值的动态过滤器、复合数据类型的过滤器以及同一参数上的多个过滤器类型。 地理处理将自动为字符串、长整型、双精度型、要素类、文件、字段和工作空间类型的参数创建过滤器。 如果您未在工具的属性对话框中选择过滤器,过滤器仍与参数相关联 - 只不过它是空的。 空过滤器等同于没有过滤器。 通过向空过滤器添加值,可以激活过滤器,并且用户的选择仅限于过滤器内容。

属性

属性说明数据类型
list
(可读写)

如果不想过滤值,可将列表属性设置为空列表。

指定的数据类型取决于过滤器类型(ValueListRangeFeatureClassFileFieldWorkspace)。

String
type
(可读写)

过滤器类型(ValueListRangeFeatureClassFileFieldWorkspace)。 使用长整型、双精度型、线性单位、面积单位和时间单位参数时,可设置过滤器类型。 对于其他类型的参数,仅有一种有效的过滤器类型,所以可以忽略这些参数的类型设置。 如果不想过滤值,可将 list 属性设置为空列表。

String

代码示例

Filter 示例

动态更新包含关键字选择列表的值列表过滤器的一个示例。如果用户在第二个参数中输入“OLD_FORMAT”,则第三个参数包含“POINT”、“LINE”和“POLYGON”。如果输入“NEW_FORMAT”,则第三个参数将包含其他三个选项。

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 示例 2

在此示例中,第二个参数中的值列表过滤器会根据第一个参数中的形状类型“要素类”发生变化。

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

相关主题