Membuat tombol di ArcMap untuk menjalankan program Python?


10

Saya memiliki skrip yang ingin saya jalankan di dalam ArcMap ketika sebuah tombol di bilah alat diklik, dan sejauh ini saya hanya bisa membuat skrip menjadi alat skrip. Saya membutuhkannya untuk dijalankan sebagai perintah, bukan sebagai alat geoproses.

Menjalankannya sebagai alat geoprocessing membutuhkan waktu lebih lama daripada ketika kode yang sama dijalankan dari jendela baris perintah. Saya baru saja mulai mencari ke dalam ArcObjects, tetapi saya ingin memulai menggunakannya jika itu yang harus saya gunakan.

Jika ada yang punya kode sampel, atau sumber daya untuk membuat tombol, itu akan bagus.


Apakah Anda mencoba melakukan ini di ArcMap atau di aplikasi mandiri ArcGIS Engine?
MathiasWestin

Saya ingin melakukan ini di ArcMap 10.
Tanner

1
versi 9.3 dari pertanyaan ini adalah Arcmap: melampirkan skrip python ke tombol
matt wilkie

Jawaban:


8

Jika Anda tidak memerlukan input atau outputparameter, sampel ini harus dapat digunakan untuk menjalankan skrip dalam perintah kustom Leveraging ArcPy dalam aplikasi .NET , contoh C #:

// Executes a shell command synchronously.
// Example of command parameter value is
// "python " + @"C:\scripts\geom_input.py".
//
public static void ExecuteCommand(object command)
{
    try
    {
        // Create the ProcessStartInfo using "cmd" as the program to be run,
        // and "/c " as the parameters.
        // "/c" tells cmd that you want it to execute the command that follows,
        // then exit.
        System.Diagnostics.ProcessStartInfo procStartInfo = new
            System.Diagnostics.ProcessStartInfo("cmd", "/c " + command);

        // The following commands are needed to redirect the standard output.
        // This means that it will be redirected to the Process.StandardOutput StreamReader.
        procStartInfo.RedirectStandardOutput = true;
        procStartInfo.UseShellExecute = false;

        // Do not create the black window.
        procStartInfo.CreateNoWindow = true;

        // Now you create a process, assign its ProcessStartInfo, and start it.
        System.Diagnostics.Process proc = new System.Diagnostics.Process();
        proc.StartInfo = procStartInfo;
        proc.Start();

        // Get the output into a string.
        string result = proc.StandardOutput.ReadToEnd();

        // Display the command output.
        Console.WriteLine(result);
    }
    catch (Exception objException)
    {
        Console.WriteLine(objException.Message);
        // Log the exception and errors.
    }
}

1
Perhatikan juga bahwa ini bukan python khusus. Itu dapat digunakan untuk menjalankan perintah eksternal apa pun.
matt wilkie

Tapi apakah itu berhasil, @Tanner?
Richard

Sejujurnya saya tidak pernah berhasil, tetapi saat itu satu-satunya pengalaman pemrograman saya adalah beberapa Python terbatas. Saya merasa seperti saya bisa mencobanya sekarang jika saya punya waktu dan masih perlu membuat tombol.
Tanner

5

Gunakan [Tambah Alat ...] di Bilah Alat / Kustomisasi untuk menambahkan skrip ke kategori. Kemudian tarik skrip ke bilah alat pilihan.


Itu yang saya lakukan. Dengan menggunakan metode itu, skrip berjalan sebagai alat skrip dan menampilkan jendela geoproses, membuat skrip membutuhkan waktu lebih lama untuk dieksekusi.
Tanner

3

Klik kanan area kosong di sebelah bilah alat> buka jendela penyesuaian> klik pada tab perintah> gulir ke bagian bawah daftar dan klik [Kontrol UI]> Pilih Kontrol UI baru> pilih jenis kontrol yang Anda inginkan dan kemudian klik Buat dan Edit. Ini akan membuka editor VBA untuk kontrol baru dan Anda dapat menulis kode Anda di dalam dengar dan menentukan acara yang memanggil kode. VBA disertakan dengan 10 secara gratis tetapi Anda harus meminta file lisensi untuk itu dan kemudian mendaftarkan lisensi itu. Panggil ESRI untuk ini dan mereka harus memberi Anda lisensi gratis. Setelah 10 ini akan hilang ...

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.