Создание кнопки в ArcMap для запуска программы на Python?


10

У меня есть скрипт, который я хочу запустить в ArcMap, когда нажимается кнопка на панели инструментов, и до сих пор мне удалось превратить скрипт в инструмент-скрипт. Мне нужно, чтобы он работал как команда, а не как инструмент геообработки.

Запуск его как инструмента геообработки занимает гораздо больше времени, чем при выполнении того же кода из окна командной строки. Я только начал изучать ArcObjects, но я хочу начать использовать его, если это то, что мне нужно использовать.

Если у кого-нибудь есть пример кода или ресурсы для создания кнопки, это было бы здорово.


Вы пытаетесь сделать это в ArcMap или в автономном приложении ArcGIS Engine?
MathiasWestin

Я хочу сделать это в ArcMap 10.
Tanner

1
9.3 версия этого вопроса - Arcmap: прикрепите скрипт python к кнопке
Matt Wilkie

Ответы:


8

Если вам не нужны какие-либо входные или выходные параметры, этот пример можно использовать для запуска сценария в пользовательской команде. Использование ArcPy в приложении .NET , пример 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
Также обратите внимание, что это не специфично для Python. Может использоваться для запуска любой внешней команды.
Мэтт Уилки

Но сработало ли это, @Tanner?
Ричард

Честно говоря, я никогда не заставлял его работать, но тогда моим единственным опытом программирования был какой-то ограниченный Python. Я чувствую, что могу сделать это честно, если бы у меня было время и мне все еще нужно было сделать кнопку.
Таннер

5

Используйте [Добавить инструменты ...] на Панели инструментов / Настройка, чтобы добавить скрипт в категорию. Затем перетащите скрипт на выбранную панель инструментов.


Это то, что я сделал. Используя этот метод, сценарий запускается как инструмент сценария и вызывает окно геообработки, в результате чего выполнение сценария занимает гораздо больше времени.
Таннер

3

Щелкните правой кнопкой мыши пустую область рядом с панелями инструментов> откройте окно настройки> щелкните вкладку команд> прокрутите список до конца и нажмите [UI Control]> Выберите новый элемент управления UI> выберите нужный тип элемента управления и затем нажмите Создать и изменить. Это откроет редактор VBA для нового элемента управления, и вы можете написать свой код внутри слушателя и определить событие, которое вызывает код. VBA входит в 10 бесплатно, но вам нужно будет запросить файл лицензии для него, а затем зарегистрировать эту лицензию. Для этого позвоните в ESRI, и они должны бесплатно предоставить вам лицензию. После 10 это уйдет ...

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.