¿Crear un botón en ArcMap para ejecutar el programa Python?

10

Tengo un script que quiero ejecutar dentro de ArcMap cuando se hace clic en un botón en una barra de herramientas, y hasta ahora solo he podido convertir el script en una herramienta de script. Necesito que se ejecute como un comando, no como una herramienta de geoprocesamiento.

Ejecutarlo como una herramienta de geoprocesamiento lleva mucho más tiempo que cuando se ejecuta el mismo código desde la ventana de la línea de comandos. Acabo de comenzar a buscar en ArcObjects, pero quiero comenzar a usarlo si es lo que necesito usar.

Si alguien tiene algún código de muestra, o recursos para crear un botón, sería genial.

Curtidor
fuente
¿Está tratando de hacer esto en ArcMap o en una aplicación independiente de ArcGIS Engine?
MathiasWestin
Quiero hacer esto en ArcMap 10.
Tanner
1
la versión 9.3 de esta pregunta es Arcmap: adjunte el script de Python al botón
matt wilkie

Respuestas:

8

Si no necesita ningún parámetro de entrada o salida, esta muestra debería ser posible para ejecutar un script en un comando personalizado Aprovechando ArcPy en una aplicación .NET , ejemplo de 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.
    }
}
MathiasWestin
fuente
1
También tenga en cuenta que esto no es específico de Python. Se puede usar para ejecutar cualquier comando externo.
Matt Wilkie
¿Pero funcionó, @Tanner?
Richard
Para ser honesto, nunca lo hice funcionar, pero en ese entonces mi única experiencia de programación fue un poco de Python. Siento que podría darle una oportunidad justa ahora si tuviera el tiempo y aún necesitara hacer un botón.
Tanner
5

Utilice [Agregar herramientas ...] en la barra de herramientas / Personalizar para agregar el script a una categoría. Luego, arrastre el script a la barra de herramientas de su elección.

haakon_d
fuente
Eso fue lo que hice. Con ese método, el script se ejecuta como una herramienta de script y abre una ventana de geoprocesamiento, lo que hace que el script tarde mucho más en ejecutarse.
Tanner
3

Haga clic con el botón derecho en un área en blanco al lado de las barras de herramientas> abra la ventana de personalización> haga clic en la pestaña de comandos> desplácese hasta el final de la lista y haga clic en [Control UI]> Seleccione el nuevo control UI> seleccione el tipo de control que desea y luego haga clic en Crear y editar. Esto abrirá el editor de VBA para el nuevo control y puede escribir su código dentro de escuchar y definir el evento que llama al código. VBA se incluye con 10 de forma gratuita, pero deberá solicitar un archivo de licencia y luego registrar esa licencia. Llame a ESRI para esto y deben darle una licencia sin cargo. Después de las 10, esto desaparecerá ...


fuente