ArcGIS Toolbox Validator 클래스에서 변경된 속성 사용

Aug 20 2020

ArcGIS Toolbox 유효성 검사기 클래스에 일부 동작을 스크립팅하려고합니다. 특히, 사용자가 미리 정의 된 옵션을 선택할 수 있도록 드롭 다운 매개 변수를 만들고 있으며 두 번째 매개 변수가 항목 목록을 업데이트합니다. 내가 가진 문제는 첫 번째 매개 변수의 옵션을 변경하면 두 번째 매개 변수에서 변경할 옵션을 얻을 수 있지만 두 번째 매개 변수의 '모두 선택 취소'버튼을 토글하면 항목이 선택 취소되지 않는다는 것입니다. 그들은 계속 확인되었습니다). Validator의 스크립트와 관련이 있다고 생각합니다.

세부 정보는 다음과 같습니다 (아래 이미지 참조).

  1. 첫 번째 매개 변수는 문자열 유형입니다. 필수, 입력 방향, 기본값 있음. 다중 값 = 아니요이며 값 목록을 사용하므로 선택할 수있는 3 가지 옵션이있는 드롭 다운이 있습니다.
  2. 두 번째 매개 변수는 문자열 유형입니다. 필수입니다. 기본값을 포함합니다. 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

답변

1 user2856 Aug 21 2020 at 04:30

"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...