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?
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
quelle
Antworten:
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 .
quelle