ArcGIS Toolbox Validator 클래스에서 변경된 속성 사용
ArcGIS Toolbox 유효성 검사기 클래스에 일부 동작을 스크립팅하려고합니다. 특히, 사용자가 미리 정의 된 옵션을 선택할 수 있도록 드롭 다운 매개 변수를 만들고 있으며 두 번째 매개 변수가 항목 목록을 업데이트합니다. 내가 가진 문제는 첫 번째 매개 변수의 옵션을 변경하면 두 번째 매개 변수에서 변경할 옵션을 얻을 수 있지만 두 번째 매개 변수의 '모두 선택 취소'버튼을 토글하면 항목이 선택 취소되지 않는다는 것입니다. 그들은 계속 확인되었습니다). Validator의 스크립트와 관련이 있다고 생각합니다.
세부 정보는 다음과 같습니다 (아래 이미지 참조).
- 첫 번째 매개 변수는 문자열 유형입니다. 필수, 입력 방향, 기본값 있음. 다중 값 = 아니요이며 값 목록을 사용하므로 선택할 수있는 3 가지 옵션이있는 드롭 다운이 있습니다.
- 두 번째 매개 변수는 문자열 유형입니다. 필수입니다. 기본값을 포함합니다. Multivalue = Yes이며 값 목록을 사용하여이 매개 변수에 채워진 항목 (항목 목록)을 켜거나 끌 수 있습니다.

따라서 Validator에서 내 스크립트는 다음과 같습니다. '모두 선택'및 '모두 선택 취소'버튼이 작동하도록하기 위해 여기에서 누락 된 것이 분명한 것을 누구나 볼 수 있습니까?
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."""
self.params[1].filter.list = [1,2,3,4]
self.params[1].values = self.params[1].filter.list
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."""
if self.params[0].altered == True:
if self.params[0].value == 'Option 1':
self.params[1].filter.list = [1,2,3,4]
self.params[1].values = self.params[1].filter.list
elif self.params[0].value == 'Option 2':
self.params[1].filter.list = ['a', 'b', 'c']
self.params[1].values = self.params[1].filter.list
elif self.params[0].value == 'Option 3':
self.params[1].filter.list = ['dr', 'bht', 'cjjjyy']
self.params[1].values = self.params[1].filter.list
return
def updateMessages(self):
"""Modify the messages created by internal validation for each tool
parameter. This method is called after internal validation."""
return
답변
"arcpy way ™"는 if parameters[0].altered and not parameters[0].hasBeenValidated:
[문서] [1]에 따르면 :
변경
altered
매개 변수 값이 변경되면 참입니다 ... 매개 변수가 변경되면 사용자가 값을 비울 때까지 (공백) 변경된 상태로 유지 되며,이 경우 변경되지 않은 상태로 돌아갑니다.
hasBeenValidated
hasBeenValidated
마지막으로updateParameters
내부 유효성 검사가 호출 된 이후 사용자가 매개 변수 값을 수정 한 경우 false 입니다. 내부 유효성 검사가 호출되면 지오 프로세싱hasBeenValidated
이 모든 매개 변수에 대해 자동으로 true로 설정 됩니다.
hasBeenValidated
에 대한 마지막 호출 이후 사용자가 값을 변경했는지 여부를 확인하는 데 사용됩니다updateParameters
.
따라서 다음으로 변경하십시오 updateParameters
.
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."""
if self.params[0].altered and not self.params[0].hasBeenValidated:
etc...