Schaltfläche in ArcMap erstellen, um Python-Programm auszuführen?

10

Ich habe ein Skript, das ich in ArcMap ausführen möchte, wenn auf eine Schaltfläche in einer Symbolleiste geklickt wird, und bisher konnte ich das Skript nur zu einem Skriptwerkzeug machen. Ich brauche es, um als Befehl ausgeführt zu werden, nicht als Geoverarbeitungswerkzeug.

Das Ausführen als Geoverarbeitungswerkzeug dauert viel länger als wenn derselbe Code über das Befehlszeilenfenster ausgeführt wird. Ich habe gerade angefangen, mich mit ArcObjects zu befassen, aber ich möchte damit beginnen, wenn es das ist, was ich verwenden muss.

Wenn jemand einen Beispielcode oder Ressourcen zum Erstellen einer Schaltfläche hat, wäre das großartig.

Gerber
quelle
Versuchen Sie dies in ArcMap oder in einer eigenständigen ArcGIS Engine-Anwendung?
MathiasWestin
Ich möchte dies in ArcMap 10 tun.
Tanner
1
Die 9.3-Version dieser Frage lautet Arcmap: Python-Skript an Button anhängen
Matt Wilkie

Antworten:

8

Wenn Sie keine Eingabe- oder Ausgabeparameter benötigen, sollte dieses Beispiel zum Ausführen eines Skripts in einem benutzerdefinierten Befehl verwendet werden können. Verwenden von ArcPy in einer .NET-Anwendung , C # -Beispiel :

// 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
quelle
1
Beachten Sie auch, dass dies nicht pythonspezifisch ist. Es kann verwendet werden, um einen beliebigen externen Befehl auszuführen.
Matt Wilkie
Aber hat es funktioniert, @Tanner?
Richard
Um ehrlich zu sein, habe ich es nie zum Laufen gebracht, aber damals war meine einzige Programmiererfahrung etwas eingeschränktes Python. Ich habe das Gefühl, ich könnte es jetzt fair versuchen, wenn ich die Zeit hätte und noch einen Knopf machen müsste.
Tanner
5

Verwenden Sie [Tools hinzufügen ...] in der Symbolleiste / Anpassen, um das Skript einer Kategorie hinzuzufügen. Ziehen Sie dann das Skript in die Symbolleiste Ihrer Wahl.

haakon_d
quelle
Das ist, was ich tat. Mit dieser Methode wird das Skript als Skript-Tool ausgeführt und öffnet ein Geoverarbeitungsfenster, sodass die Ausführung des Skripts viel länger dauert.
Tanner
3

Klicken Sie mit der rechten Maustaste auf einen leeren Bereich neben Ihren Symbolleisten, öffnen Sie das Anpassungsfenster, klicken Sie auf die Registerkarte Befehle, scrollen Sie zum Ende der Liste und klicken Sie auf [UI-Steuerelement]> Neues UI-Steuerelement auswählen> wählen Sie den gewünschten Steuerelementtyp aus und dann Klicken Sie auf Erstellen und Bearbeiten. Dadurch wird der VBA-Editor für das neue Steuerelement geöffnet, und Sie können Ihren Code in listen schreiben und das Ereignis definieren, das den Code aufruft. VBA ist in 10 kostenlos enthalten, Sie müssen jedoch eine Lizenzdatei dafür anfordern und diese Lizenz dann registrieren. Rufen Sie dazu ESRI an und Sie sollten eine kostenlose Lizenz erhalten. Nach 10 wird dies verschwinden ...


quelle