Tworzenie przycisku w ArcMap w celu uruchomienia programu Python?


10

Mam skrypt, który chcę uruchomić w ArcMap po kliknięciu przycisku na pasku narzędzi, a do tej pory mogłem tylko przekształcić go w narzędzie skryptowe. Potrzebuję go do uruchomienia jako polecenia, a nie narzędzia do geoprzetwarzania.

Uruchomienie go jako narzędzia geoprzetwarzania trwa znacznie dłużej niż w przypadku wykonania tego samego kodu z okna wiersza poleceń. Właśnie zacząłem przeglądać ArcObjects, ale chcę zacząć z niego korzystać, jeśli będę tego potrzebował.

Jeśli ktoś ma jakiś przykładowy kod lub zasoby do tworzenia przycisku, byłoby świetnie.


Czy próbujesz to zrobić w ArcMap lub w samodzielnej aplikacji ArcGIS Engine?
MathiasWestin

Chcę to zrobić w ArcMap 10.
Tanner

Odpowiedzi:


8

Jeśli nie potrzebujesz żadnych parametrów wejściowych ani wyjściowych, w tym przykładzie powinno być możliwe uruchomienie skryptu w niestandardowym poleceniu Wykorzystanie ArcPy w aplikacji .NET , przykład w 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
Zauważ też, że nie jest to specyficzne dla Pythona. Można go użyć do uruchomienia dowolnego polecenia zewnętrznego.
matt wilkie

Ale czy to zadziałało, @Tanner?
Richard

Szczerze mówiąc, nigdy nie działałem, ale wtedy moim jedynym doświadczeniem w programowaniu było ograniczone Python. Czuję, że mógłbym teraz dać temu dobry strzał, gdybym miał czas i nadal potrzebowałbym zrobić guzik.
Tanner,

5

Użyj [Dodaj narzędzia ...] w Pasku narzędzi / Dostosuj, aby dodać skrypt do kategorii. Następnie przeciągnij skrypt na wybrany pasek narzędzi.


To jest to co zrobiłem. Przy użyciu tej metody skrypt działa jako narzędzie skryptowe i wyświetla okno geoprzetwarzania, co powoduje, że wykonanie skryptu trwa dłużej.
Tanner,

3

Kliknij prawym przyciskiem myszy pusty obszar obok pasków narzędzi> otwórz okno dostosowywania> kliknij kartę poleceń> przewiń w dół listy i kliknij [Sterowanie UI]> Wybierz nowy Sterowanie UI> wybierz żądany rodzaj sterowania, a następnie kliknij Utwórz i edytuj. Spowoduje to otwarcie edytora VBA dla nowej kontrolki i możesz napisać kod wewnątrz usłyszeć i zdefiniować zdarzenie, które wywołuje kod. VBA jest dołączony do 10 za darmo, ale musisz poprosić o plik licencji, a następnie zarejestrować tę licencję. Zadzwoń do ESRI, aby otrzymać bezpłatną licencję. Po 10 to zniknie ...

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.