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


10

У мене є сценарій, який я хочу запустити в ArcMap, коли натискається кнопка на панелі інструментів, і поки що мені вдалося зробити сценарій лише інструментом сценарію. Мені потрібно, щоб він працював як команда, а не як інструмент для геообробки.

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

Якщо у когось є зразок коду чи ресурси для створення кнопки, це було б чудово.


Ви намагаєтесь це зробити в ArcMap або в автономному додатку ArcGIS Engine?
MathiasWestin

Я хочу зробити це в ArcMap 10.
Таннер

Відповіді:


8

Якщо вам не потрібні параметри вводу або виводу, цей зразок повинен бути можливим для використання сценарію в користувацькій команді Leveraging 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
Також зауважте, що це не конкретно пітон. Його можна використовувати для запуску будь-якої зовнішньої команди.
matt wilkie

Але це спрацювало, @Tanner?
Річард

Якщо чесно, я ніколи не змушував його працювати, але тоді єдиним моїм досвідом програмування був якийсь обмежений Python. Я відчуваю, що я міг би зараз добре пограти, якби мав час і все-таки знадобився зробити ґудзик.
Таннер

5

Використовуйте [Додати інструменти ...] на Панелі інструментів / Налаштувати, щоб додати сценарій до категорії. Потім перетягніть сценарій на вибрану панель інструментів.


Це я і зробив. Використовуючи цей метод, скрипт працює як інструмент сценарію і відкриває вікно геообробки, завдяки чому сценарій займає набагато більше часу.
Таннер

3

Клацніть правою кнопкою миші порожню область поруч із панелями інструментів> відкрийте вікно налаштування> натисніть на вкладку команд> прокрутіть до нижньої частини списку та натисніть [Керування інтерфейсом користувача]> Вибрати новий елемент управління користувальницьким інтерфейсом> виберіть потрібний тип керування, а потім натисніть кнопку Створити та редагувати. Це відкриє редактор VBA для нового елемента керування, і ви зможете записати свій код усередині прослуховування та визначити подію, яка викликає цей код. VBA включено до 10 безкоштовно, але вам потрібно буде подати ліцензійний файл на нього, а потім зареєструвати цю ліцензію. Зателефонуйте ESRI для цього, і вони повинні отримати ліцензію безкоштовно. Через 10 це піде ...

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.