ArcGIS Desktop

  • ArcGIS Pro
  • ArcMap

  • My Profile
  • Hilfe
  • Sign Out
ArcGIS Desktop

ArcGIS Online

Die Mapping-Plattform für Ihre Organisation

ArcGIS Desktop

Ein vollständiges professionelles GIS

ArcGIS Enterprise

GIS in Ihrem Unternehmen

ArcGIS Developers

Werkzeuge zum Erstellen standortbezogener Apps

ArcGIS Solutions

Kostenlose Karten- und App-Vorlagen für Ihre Branche

ArcGIS Marketplace

Rufen Sie Apps und Daten für Ihre Organisation ab.

  • Dokumentation
  • Support
Esri
  • Anmelden
user
  • Eigenes Profil
  • Abmelden

ArcMap

  • Startseite
  • Erste Schritte
  • Karte
  • Analysieren
  • Verwalten von Daten
  • Werkzeuge
  • Erweiterungen

Anpassen von Werkzeugverhalten in einer Python-Toolbox

  • Zugreifen auf Werkzeugparameter
  • Parameterobjekt

Die Validierung umfasst alle Schritte, bevor auf die Schaltfläche OK eines Werkzeugs geklickt wird. Wenn Sie benutzerdefinierte Werkzeuge erstellen, können Sie anhand der Validierung anpassen, wie Parameter reagieren und mit Werten und anderen Parametern interagieren. Die Validierung erfolgt mit einem Python-Codeblock, der zum Steuern des Werkzeugverhaltens verwendet wird.

Weitere Informationen zur Validierung finden Sie unter Validierung in Skriptwerkzeugen.

In einer Python-Toolbox verfügt jeder Werkzeugparameter über ein zugehöriges Parameterobjekt mit Eigenschaften und Methoden, die für die Werkzeugvalidierung nützlich sind. In einer Python-Toolbox erfolgt die Definition von Parametern in der Methode getParameterInfo der Werkzeugklasse. Das Verhalten dieser Parameter sowie ihre Interaktion miteinander und mit den Eingaben werden entsprechend der Methode updateParameters der Werkzeugklasse überprüft.

  • Aktualisieren des Schemas in einer Python-Toolbox
  • Lizenzverhalten in einer Python-Toolbox

Zugreifen auf Werkzeugparameter

Parameterobjekte bilden die Grundlage für die Definition und Interaktion der Parameter in einer Python-Toolbox. In der Regel wird die Parameterliste, wie im folgenden Code zu sehen, in der Methode getParameterInfo der Werkzeugklasse erstellt.

def getParameterInfo(self):
    #Define parameter definitions
    # First parameter
    param0 = arcpy.Parameter(
        displayName="Input Features",
        name="in_features",
        datatype="GPFeatureLayer",
        parameterType="Required",
        direction="Input")
    return [param0]

Weitere Informationen zum Definieren von Parametern in einer Python-Toolbox finden Sie unter Definieren von Parametern in einer Python-Toolbox.

Parameterobjekt

Methoden

MethodennameVerwendung

setErrorMessage(message:string)

Kennzeichnet den Parameter als fehlerhaft (rotes X) und gibt die entsprechende Meldung aus. Werkzeuge werden nicht ausgeführt, wenn ein Parameter einen Fehler aufweist.

setWarningMessage(message:string)

Gibt an, dass für den Parameter eine Warnung vorliegt (gelbes Dreieck), und gibt die entsprechende Meldung aus. Anders als bei Fehlern werden Werkzeuge bei Warnmeldungen ausgeführt.

setIDMessage(messageType: string, messageID: string, {AddArgument1}, {AddArgument2})

Ermöglicht Ihnen das Festlegen einer Systemmeldung. Die Argumente entsprechen denen der AddIDMessage-Funktion.

clearMessage()

Löscht alle Meldungstexte und setzt den Status auf "Information" (kein Fehler und keine Warnung).

hasError()

Gibt "true" zurück, wenn der Parameter einen Fehler enthält.

hasWarning()

Gibt "true" zurück, wenn für den Parameter eine Warnung vorliegt.

isInputValueDerived()

Gibt "true" zurück, wenn das Werkzeug in einem Modell überprüft wird und der Eingabewert der Ausgabe eines anderen Werkzeugs im Modell entspricht.

Parameterobjektmethoden

Eigenschaften

Name der EigenschaftLesen/SchreibenWerteBeschreibung

name

Nur Lesen

Zeichenfolge

Der Parametername

direction

Nur Lesen

String: "Input", "Output"

Eingabe-/Ausgaberichtung des Parameters

datatype

Nur Lesen

Zeichenfolge

Eine Liste von Parameterdatentypen finden Sie unter Definieren von Parameterdatentypen in einer Python-Toolbox.

parameterType

Nur Lesen

String: "Required", "Optional", "Derived"

Der Parametertyp

parameterDependencies

Lesen/Schreiben

Python-Liste

Eine Liste der Indexwerte für jeden abhängigen Parameter

value

Lesen/Schreiben

Wertobjekt

Der Wert des Parameters

defaultEnvironmentName

Nur Lesen

Zeichenfolge

Die standardmäßige Umgebungseinstellung.

enabled

Lesen/Schreiben

Boolesch

"False", wenn der Parameter nicht verfügbar ist.

altered

Nur Lesen

Boolesch

"True", wenn der Wert geändert wurde.

hasBeenValidated

Nur Lesen

Boolesch

"True", wenn der Parameter von der internen Prüfroutine geprüft wurde.

category

Lesen/Schreiben

Zeichenfolge

Die Kategorie des Parameters.

schema

Nur Lesen

Schema-Objekt

Das Schema des Ausgabe-Datasets.

filter

Nur Lesen

Filter-Objekt

Der auf die Werte im Parameter angewendete Filter.

symbology

Lesen/Schreiben

Zeichenfolge

Der Pfad zu einer Layer-Datei (.lyr), die zur Darstellung der Ausgabe verwendet wird.

message

Nur Lesen

Zeichenfolge

Die angezeigte Meldung. Weitere Informationen finden Sie oben unter SetErrorMessage und SetWarningMessage.

Parameterobjekteigenschaften

parameterDependencies

Parameterabhängigkeiten werden normalerweise für die Verwendung durch das Schema-Objekt definiert. Es gibt zwei Fälle, in denen die Abhängigkeiten unter Umständen bereits in der Methode getParameterInfo des Werkzeugs festgelegt sind.

  • Bei einem Ausgabe-Dataset-Parameter mit dem Typ "Derived" ist die Abhängigkeit der Indexwert des Parameters, von dem die Ausgabe abgeleitet wird.
  • Bei bestimmten Eingabedatentypen ist die Abhängigkeit der Indexwert des Parameters, der die vom Steuerelement verwendeten Informationen enthält (siehe folgende Tabelle).

EingabedatentypAbhängiger DatentypBeschreibung

Feld oder SQL-Ausdruck

Tabelle

Die Tabelle mit den Feldern

INFO-Feld oder INFO-Ausdruck

INFO-Tabelle

Die INFO-Tabelle mit den Feldern

Coverage-Feature-Class

Coverage

Das Coverage mit den Features

Flächeneinheiten oder lineare Einheiten

GeoDataset

Geographisches Dataset, das zum Ermitteln der Standardeinheiten verwendet wird

Koordinatensystem

Workspace

Workspace, der zum Ermitteln des Standardkoordinatensystems verwendet wird

Hierarchie-Einstellungen für Network Analyst

Netzwerk-Dataset

Netzwerk-Dataset mit den Informationen zur Hierarchie

Geostatistische Wertetabelle

Geostatistischer Layer

Der Analyse-Layer mit den Tabellen

Abgerufen von"datatypes"
Hinweis:

parameterDependencies entspricht der Einstellung Abgerufen von des Skriptwerkzeug-Assistenten.

Abhängigkeiten werden normalerweise in der Methode getParameterInfo festgelegt:

def getParameterInfo(self):
    #Define parameter definitions
    # First parameter
    param0 = arcpy.Parameter(
        displayName="Input Features",
        name="in_features",
        datatype="GPFeatureLayer",
        parameterType="Required",
        direction="Input")
    # Second parameter
    param1 = arcpy.Parameter(
        displayName="Sinuosity Field",
        name="sinuosity_field",
        datatype="Field",
        parameterType="Optional",
        direction="Input")
    param1.value = "sinuosity"
    # Third parameter
    param2 = arcpy.Parameter(
        displayName="Output Features",
        name="out_features",
        datatype="GPFeatureLayer",
        parameterType="Derived",
        direction="Output")
    param2.parameterDependencies = [param0.name]
    param2.schema.clone = True
    params = [param0, param1, param2]
    return params

value

Dies ist der vom Benutzer eingegebene oder von Ihnen durch Programmierung festgelegte Wert des Parameters. Sie können den Wert in der Methode getParameterInfo festlegen. In diesem Fall wird der Wert als anfänglicher Standardwert für den Parameter verwendet. Sie können den Wert ebenfalls in updateParameters als Reaktion auf Benutzereingaben festlegen, wie unten dargestellt.

def updateParameters(self, parameters):
    # Set the default distance threshold to 1/100 of the larger of the width
    #  or height of the extent of the input features.  Do not set if there is no 
    #  input dataset yet, or the user has set a specific distance (Altered is true).
    #
    if parameters[0].value:
        if not parameters[6].altered:
            extent = arcpy.Describe(parameters[0].value).extent
        if extent.width > extent.height:
            parameters[6].value = extent.width / 100
        else:
            parameters[6].value = extent.height / 100
    return

Die Eigenschaft value eines Parameters gibt ein Objekt zurück, es sei denn, der Parameter ist nicht gefüllt, wodurch value den Wert None zurückgibt. Um dies zu verhindern, führen Sie eine if-Prüfung durch, bevor Sie den Wert eines Parameters verwenden.

Mit dem folgenden Codeausschnitt wird überprüft, ob der Wert der Zeichenfolge "Get Spatial Weights From File" entspricht. Die Überprüfung funktioniert, weil es sich beim Datentyp des Parameters um eine Zeichenfolge handelt.

# If the option to use a weights file is selected, enable the 
#   parameter for specifying the file, otherwise disable it
if parameters[3].value:  # check that parameter has a value
    if parameters[3].value == "Get Spatial Weights From File":
        parameters[8].enabled = True
    else:
        parameters[8].enabled = False

Verwenden Sie die Werteigenschaft des Wertobjekts, wenn eine Zeichenfolge bearbeitet oder analysiert werden soll, da ein Wertobjekt die Bearbeitung von Zeichenfolgen nicht unterstützt. Im Codebeispiel wird die Methode os.path.dirname verwendet, um das Verzeichnis aus einem Dataset zurückzugeben.

if parameters[0].value:
    workspace = os.path.dirname(parameters[0].value.value)
Hinweis:

Verwenden Sie bei der Validierung keine Methoden, die einen Katalogpfad verwenden, wie z. B. Describe. Eine Ausnahme stellt ListFields dar. Das Dataset ist möglicherweise nicht vorhanden, wenn das Werkzeug in ModelBuilder validiert wird, und die Methode kann fehlschlagen oder unerwartete Ergebnisse zurückgeben.

Im speziellen Fall von ListFields stellt die Eigenschaft Describe des Objekts fields die entsprechenden Informationen bereit.

Hinweis:

Legen Sie keinen Parameterwert in updateMessages() fest, da dieser Wert nicht von der internen Prüfroutine geprüft wird.

altered

altered ist "true", wenn der Wert eines Parameters geändert wurde, zum Beispiel durch Eingabe eines Ausgabepfades. Nachdem der Parameter geändert wurde, bleibt er geändert, bis der Benutzer den Wert leert (ausblendet). Dann kehrt er zu seinem nicht geänderten Zustand zurück. Eine programmatische Änderung eines Wertes durch Validierungscode hat Auswirkung auf den geänderten Zustand. Wenn Sie also einen Wert für einen Parameter festlegen, wird der geänderte Zustand (altered) des Parameters aktualisiert.

Mit altered können Sie ermitteln, ob der Wert eines Parameters geändert werden kann. Beispiel: Ein Werkzeug verfügt über einen Feature-Class-Parameter und einen Schlüsselwortparameter. Wenn die Feature-Class Punkte oder Polygone enthält, lauten die Schlüsselwörter ROT, GRÜN und BLAU. Bei Linien lauten sie ORANGE, GELB, LILA und WEISS.

Der Benutzer gibt eine Point-Feature-Class ein. Wird der Schlüsselwortparameter nicht geändert, setzen Sie den Wert auf ROT, da dies der Standardwert ist.

Gibt der Benutzer dann eine Line-Feature-Class ein, legen Sie den Standardwert als ORANGE fest, solange der Schlüsselwortparameter nicht geändert wird.

Wenn der Schlüsselwortparameter allerdings vom Benutzer geändert wird (das heißt, das Schlüsselwort wird auf GRÜN festgelegt), sollten Sie das Schlüsselwort nicht zurücksetzen, da der Benutzer eine Wahl getroffen hat (GRÜN) und Sie die zugrunde liegende Absicht nicht kennen. Eventuell ändert der Benutzer die Feature-Class, sodass GRÜN ein gültiger Wert ist, oder er ändert das Schlüsselwort (etwa in LILA). Da GRÜN nicht zur Gruppe der Schlüsselwörter gehört, die Sie für Linien definiert haben, wird der Parameter von der internen Prüfung als fehlerhaft gekennzeichnet. Der Benutzer hat dann zwei Möglichkeiten: Änderung der Eingabe-Feature-Class oder Änderung des Schlüsselworts

if not parameters[2].altered:
    parameters[2].value = "POINT"

hasBeenValidated

hasBeenValidated ist "false", wenn der Wert eines Parameters seit dem letzten Aufruf von updateParameters und der letzten internen Prüfung geändert wurde. Nach dem Aufruf der internen Prüfung wird hasBeenValidated von der Geoverarbeitung für jeden Parameter automatisch auf "true" festgelegt.

Mit hasBeenValidated wird ermittelt, ob ein Wert seit dem letzten Aufruf von updateParameters geändert wurde. Sie können diese Information bei der Entscheidung heranziehen, ob Sie Ihre eigene Überprüfung des Parameters vornehmen möchten.

def updateParameters(self, parameters):
    # Set the default distance threshold to 1/100 of the larger of the width
    #  or height of the extent of the input features.  Do not set if there is no 
    #  input dataset yet, or the user has set a specific distance (Altered is true).
    #
    if parameters[0].value:
        if not parameters[6].altered:
            extent = arcpy.Describe(parameters[0].value).extent
        if extent.width > extent.height:
            parameters[6].value = extent.width / 100
        else:
            parameters[6].value = extent.height / 100
    return

Verwandte Themen

  • Aktualisieren des Schemas in einer Python-Toolbox
  • Definieren von Parametern in einer Python-Toolbox
  • Was ist eine Python-Toolbox?
  • Parameter der Skriptwerkzeuge
  • Validierung in Skriptwerkzeugen

ArcGIS Desktop

  • Startseite
  • Dokumentation
  • Support

ArcGIS

  • ArcGIS Online
  • ArcGIS Desktop
  • ArcGIS Enterprise
  • ArcGIS
  • ArcGIS Developer
  • ArcGIS Solutions
  • ArcGIS Marketplace

Über Esri

  • Über uns
  • Karriere
  • Esri Blog
  • User Conference
  • Developer Summit
Esri
Wir sind an Ihrer Meinung interessiert.
Copyright © 2021 Esri. | Datenschutz | Rechtliches