Bisakah ArcPy mengisi formulir di antarmuka Add-in?

8

Saya mencoba membuat alat ArcPy, yang akan meminta pengguna untuk memasukkan beberapa informasi (ID, Nama, Alamat, Zip, dll.) Terlebih dahulu. Antarmuka add-in saya diperlihatkan di bawah ini, dan berharap untuk mengimplementasikannya setelah pengguna memasukkan ID, jika semua info terkait lainnya (Nama, Alamat, dll.) Ada di tabel lain yang diketahui, mereka dapat ditampilkan di tempat kosong berikut di pada saat yang sama, alih-alih membiarkan pengguna mengetik semuanya.

Singkatnya, bisakah ArcPy mengisi formulir di antarmuka Add-in, bukan di jendela hasil?

masukkan deskripsi gambar di sini

Validasi berfungsi, tetapi sangat lambat ketika saya menjalankan kursor pencarian di .dbf yang memiliki lebih dari 160.000 catatan. Bagaimana saya dapat memperbaiki kode di bawah ini, atau adakah solusi yang lebih baik selain menggunakan alat skrip python? Tampaknya formulir akan melewati kursor lagi bahkan setelah saya mengisi kekosongan yang tidak terkait lainnya.

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
Codfish energik
sumber
4
Sudahkah Anda melihat validasi alat khusus ? Itu dapat digunakan untuk mengisi bidang berdasarkan bidang lain.
Barbarossa
1
Anda menggunakan kursor gaya lama, Anda ingin menggunakan kursor pencarian baru dan lebih cepat dalam modul da , ini harus menyelesaikan masalah kecepatan.
Hornbydd
Terima kasih atas saran Anda! Saya mengonversi tabel sebagai file .csv dan menggunakan SearchCursor (arcpy.da), dan itu berfungsi dengan sempurna!
Energetic Codfish
Posting yang lebih lama, tetapi saya mengalami masalah serupa ketika saya sedang membangun addin. Anda akan ingin menggunakan rasa .da dari kursor pencarian, dan juga menggunakan format data yang lebih ramah sistem, seperti csv atau xlsx.
COCO

Jawaban:

4

Saya tidak pernah menggunakan Python Addins tetapi antarmuka yang Anda gambarkan adalah Script Tool. Diskusi tentang memanggil alat Script dari Addins ditemukan di sini . Seperti komentar @Barbarossa di atas, Anda dapat menggunakan validasi alat untuk mengisi parameter. Kecuali ada alasan khusus untuk membuat Python Addin, saya mungkin akan tetap membuat Python Script Tool .

Hornbydd
sumber
1
@EnergeticCodfish Jika ini menyelesaikan masalah Anda, bisakah Anda mengklik tombol Terima hijau?
PolyGeo