Creazione del pulsante in ArcMap per eseguire il programma Python?


10

Ho uno script che voglio eseguire in ArcMap quando si fa clic su un pulsante in una barra degli strumenti, e finora sono stato in grado di trasformare lo script solo in uno strumento di script. Ne ho bisogno per essere eseguito come comando, non come strumento di geoprocessing.

L'esecuzione come strumento di geoprocessing richiede molto più tempo rispetto a quando lo stesso codice viene eseguito dalla finestra della riga di comando. Ho appena iniziato a cercare in ArcObjects, ma voglio iniziare a usarlo se è quello che dovrò usare.

Se qualcuno ha qualche codice di esempio o risorse per la creazione di un pulsante, sarebbe fantastico.


Stai provando a farlo in ArcMap o in un'applicazione standalone ArcGIS Engine?
MathiasWestin,

Voglio farlo in ArcMap 10.
Tanner,

1
la versione 9.3 di questa domanda è Arcmap: allega script python al pulsante
matt wilkie

Risposte:


8

Se non hai bisogno di parametri di input o output, questo esempio dovrebbe essere possibile utilizzare per eseguire uno script in un comando personalizzato Sfruttando ArcPy in un'applicazione .NET , esempio 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
Si noti inoltre che questo non è specifico di Python. Può essere utilizzato per eseguire qualsiasi comando esterno.
matt wilkie,

Ma ha funzionato, @Tanner?
Richard,

A dire il vero non l'ho mai fatto funzionare, ma all'epoca la mia unica esperienza di programmazione era un Python limitato. Mi sento come se potessi dare un colpo giusto adesso se avessi il tempo e ancora bisogno di fare un pulsante.
Tanner,

5

Utilizzare [Aggiungi strumenti ...] nella barra degli strumenti / Personalizza per aggiungere lo script a una categoria. Quindi trascina lo script nella barra degli strumenti di tua scelta.


Questo è quello che ho fatto. Utilizzando tale metodo, lo script viene eseguito come strumento di script e visualizza una finestra di geoprocessing, rendendo lo script molto più lungo da eseguire.
Tanner,

3

Fare clic con il pulsante destro del mouse su un'area vuota accanto alle barre degli strumenti> aprire la finestra di personalizzazione> fare clic sulla scheda comandi> scorrere fino alla fine dell'elenco e fare clic su [Controllo UI]> Seleziona nuovo controllo UI> selezionare il tipo di controllo desiderato e quindi fai clic su Crea e modifica. Questo aprirà l'editor VBA per il nuovo controllo e potrai scrivere il tuo codice all'interno di hear e definire l'evento che chiama il codice. VBA è incluso in 10 gratuitamente, ma dovrai richiedere un file di licenza per esso e quindi registrare quella licenza. Chiama ESRI per questo e dovrebbero darti una licenza gratuita. Dopo le 10 questo andrà via ...

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.