Criando botão no ArcMap para executar o programa Python?

10

Eu tenho um script que quero executar no ArcMap quando um botão em uma barra de ferramentas é clicado e, até agora, só consegui transformar o script em uma ferramenta de script. Eu preciso que ele seja executado como um comando, não como uma ferramenta de geoprocessamento.

A execução como uma ferramenta de geoprocessamento leva muito mais tempo do que quando o mesmo código é executado na janela da linha de comando. Acabei de começar a pesquisar no ArcObjects, mas quero começar a usá-lo se for o que preciso usar.

Se alguém tiver algum código de exemplo ou recursos para criar um botão, isso seria ótimo.

Curtidor
fonte
Você está tentando fazer isso no ArcMap ou em um aplicativo independente do ArcGIS Engine?
MathiasWestin
Eu quero fazer isso no ArcMap 10.
Tanner
1
a versão 9.3 desta questão é ArcMap: anexar script python para o botão
Matt Wilkie

Respostas:

8

Se você não precisar de nenhum parâmetro de entrada ou saída, é possível usar este exemplo para executar um script em um comando personalizado Alavancando o ArcPy em um aplicativo .NET , exemplo 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
fonte
1
Observe também que isso não é específico do python. Pode ser usado para executar qualquer comando externo.
Matt Wilkie
Mas funcionou, @ Tanner?
Richard
Para ser sincero, nunca consegui funcionar, mas naquela época minha única experiência em programação era um Python limitado. Eu sinto que poderia dar uma chance agora, se tivesse tempo e ainda precisasse apertar um botão.
Tanner
5

Use [Adicionar Ferramentas ...] na Barra de Ferramentas / Personalizar para adicionar o script a uma categoria. Em seguida, puxe o script para a barra de ferramentas de sua escolha.

haakon_d
fonte
Isso é o que eu fiz. Usando esse método, o script é executado como uma ferramenta de script e exibe uma janela de geoprocessamento, tornando o script muito mais demorado.
Tanner
3

Clique com o botão direito do mouse em uma área em branco ao lado das barras de ferramentas> abra a janela de personalização> clique na guia comandos> role até o final da lista e clique em [Controle da interface do usuário]> Selecionar novo controle da interface do usuário> selecione o tipo de controle que deseja e, em seguida, clique em Criar e editar. Isso abrirá o editor VBA para o novo controle e você poderá escrever seu código dentro de ouvir e definir o evento que chama o código. O VBA está incluído no 10 gratuitamente, mas você precisará solicitar um arquivo de licença e depois registrar essa licença. Ligue para a ESRI e eles deverão fornecer uma licença gratuitamente. Depois das 10 isto desaparece ...


fonte