Erstellen Sie eine Schaltfläche, die das Python-Skript als Befehl und nicht als Skript-Tool aufruft?


12

Ich glaube, dass in Arc9.3 Befehle mithilfe von VBA-Skripten erstellt werden könnten. Um einen benutzerdefinierten Befehl hinzuzufügen, navigieren Sie zu Anpassen> Symbolleisten> Anpassen ... und klicken auf UIControls. UIControls ist in Version 10 jedoch nicht vorhanden.

Ich erstelle zwei separate Skripte für ein Kartenbuchprojekt. Ein Skript speichert die Layouteinstellungen in einer Tabelle, und das andere Skript aktualisiert das Layout mit Einstellungen aus derselben Tabelle. Ich möchte, dass diese beiden Skripte Befehle sind, die Schaltflächen in einer Symbolleiste zugewiesen sind. Ich habe sie als Skriptwerkzeuge erstellt, aber jedes Mal, wenn ich darauf klicke, wird das Skript als Geoverarbeitungswerkzeug ausgeführt. Es öffnet sich ein Fortschrittsfenster und die Ausführung dauert etwa zehnmal länger als wenn ich den Code im Python-Befehlszeilenfenster ausgeführt hätte. Ich möchte weder das Fortschrittsfenster noch die viel längere Ausführungszeit.

Wie kann ich dafür sorgen, dass das Skript nicht als "Werkzeug" betrachtet wird und stattdessen ein Befehl ähnlich der Schaltfläche "Speichern" ist?

Antworten:


6

In einem Excel VBA-Makro wird ein Python-Skript mit dem Namen folgendermaßen aufgerufen test.py:

Sub test()

rsp = Shell(Environ$("COMSPEC") & " /c C:/test.py", vbNormalFocus)

End Sub

(Originalquelle hier ) Ich habe vergessen, wie ein ArcGIS VBA-Modul ausgeführt wird, aber möglicherweise funktioniert eine ähnliche Zeile zum Aufrufen Ihres Python-Skripts.


Eine andere Strategie könnte darin bestehen, Ihr Python-Skript in eine ausführbare Datei (.exe) oder eine Batch-Datei (.bat) zu kompilieren und dann aufzurufen.


Ich habe gerade eine andere Antwort auf gis.se gesehen, die eleganter ist:

Private Sub python_Click()
    Shell "C:\Python25\python.exe ""C:\rowcount.py"
End Sub

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.