Kann ArcPy Formulare in der Add-In-Oberfläche ausfüllen?


8

Ich versuche, ein ArcPy-Tool zu erstellen, das den Benutzer auffordert, zuerst einige Informationen (ID, Name, Adresse, Postleitzahl usw.) einzugeben. Meine Add-In-Oberfläche wird unten gezeigt und ich hoffe zu implementieren, dass, sobald der Benutzer die ID eingibt, alle anderen verwandten Informationen (Name, Adresse usw.) in einer anderen bekannten Tabelle vorhanden sind, sie in den folgenden Leerzeichen unter angezeigt werden können zur gleichen Zeit, anstatt den Benutzer alles eingeben zu lassen.

Kurz gesagt, kann ArcPy Formulare in der Add-In-Oberfläche und nicht im Ergebnisfenster ausfüllen?

Geben Sie hier die Bildbeschreibung ein

Die Validierung funktioniert, ist aber extrem langsam, wenn ich einen Suchcursor in einer DBF mit mehr als 160.000 Datensätzen ausführe. Wie kann ich den folgenden Code verbessern oder gibt es eine bessere Lösung als die Verwendung des Python-Skript-Tools? Es scheint, dass das Formular den Cursor erneut durchlaufen wird, selbst nachdem ich andere nicht verwandte Lücken ausgefüllt habe.

import arcpy, datetime
import os
import sys
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()
    fc = "C:\\test\\vectorDBO.dbf"
    field = "PARCEL"
    cursor = arcpy.SearchCursor(fc)
    row = cursor.next()
    n = 0
    while row:
        if row.getValue("PARCEL") == self.params[0].value:
            self.params[1].value = row.getValue("LASTNM")
            self.params[3].value = row.getValue("ADDRESS")
            self.params[4].value = row.getValue("CITY")
            self.params[6].value = row.getValue("ZIPCODE")
            break
        row = cursor.next()

  def initializeParameters(self):
    """Refine the properties of a tool's parameters.  This method is
    called when the tool is opened."""
    self.params[10].value = datetime.datetime.now()
    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."""
    return

  def updateMessages(self):
    """Modify the messages created by internal validation for each tool
    parameter.  This method is called after internal validation."""
    return

4
Haben Sie sich die Validierung von benutzerdefinierten Werkzeugen angesehen ? Es kann verwendet werden, um Felder basierend auf anderen Feldern zu füllen.
Barbarossa

1
Wenn Sie den Cursor im alten Stil verwenden, möchten Sie den neuen und schnelleren Suchcursor im da-Modul verwenden . Dies sollte das Geschwindigkeitsproblem beheben.
Hornbydd

Danke für Ihren Vorschlag! Ich konvertiere die Tabelle als CSV-Datei und verwende SearchCursor (arcpy.da), und es funktioniert perfekt!
Energetic Codfish

Älterer Beitrag, aber ich habe ein ähnliches Problem festgestellt, als ich ein Add-In erstellt habe. Sie sollten die .da-Variante des Suchcursors verwenden und ein systemfreundlicheres Datenformat wie csv oder xlsx verwenden.
COCO

Antworten:


4

Ich habe noch nie Python-Addins verwendet, aber die von Ihnen beschriebene Oberfläche ist ein Skript-Tool. Eine Diskussion zum Aufrufen von Skript-Tools von Addins finden Sie hier . Wie oben in @Barbarossa kommentiert, können Sie die Parameter mithilfe der Toolvalidierung füllen. Sofern es keinen bestimmten Grund für die Erstellung eines Python-Add-Ins gibt, würde ich mich wahrscheinlich an die Erstellung eines Python-Skript-Tools halten .


1
@EnergeticCodfish Wenn dies Ihr Problem gelöst hat, können Sie bitte auf die grüne Schaltfläche Akzeptieren klicken?
PolyGeo
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.