Créer un bouton dans ArcMap pour exécuter le programme Python?

10

J'ai un script que je veux exécuter dans ArcMap lorsqu'un bouton dans une barre d'outils est cliqué, et jusqu'à présent, je n'ai pu transformer le script qu'en outil de script. J'en ai besoin pour fonctionner comme une commande, pas comme un outil de géotraitement.

L'exécuter en tant qu'outil de géotraitement prend beaucoup plus de temps que lorsque le même code est exécuté à partir de la fenêtre de ligne de commande. Je viens de commencer à étudier ArcObjects, mais je veux commencer à l'utiliser si c'est ce dont j'ai besoin.

Si quelqu'un a un exemple de code ou des ressources pour créer un bouton, ce serait bien.

Tanneur
la source
Essayez-vous de le faire dans ArcMap ou dans une application autonome ArcGIS Engine?
MathiasWestin
Je veux le faire dans ArcMap 10.
Tanner le
1
la version 9.3 de cette question est Arcmap: attachez le script python au bouton
matt wilkie

Réponses:

8

Si vous n'avez pas besoin de paramètres d'entrée ou de sortie, cet exemple devrait être possible d'utiliser pour exécuter un script dans une commande personnalisée Exploiter ArcPy dans une application .NET , exemple 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.
    }
}
MathiasWestin
la source
1
Notez également que ce n'est pas spécifique à python. Il peut être utilisé pour exécuter n'importe quelle commande externe.
matt wilkie
Mais cela a-t-il fonctionné, @Tanner?
Richard
Pour être honnête, je n'ai jamais réussi à le faire fonctionner, mais à l'époque, ma seule expérience de programmation était un peu de Python. J'ai l'impression que je pourrais lui donner un coup juste maintenant si j'avais le temps et que j'avais encore besoin de faire un bouton.
Tanner
5

Utilisez [Ajouter des outils ...] dans la barre d'outils / Personnaliser pour ajouter le script à une catégorie. Tirez ensuite le script dans la barre d'outils de votre choix.

haakon_d
la source
C'est ce que j'ai fait. En utilisant cette méthode, le script s'exécute comme un outil de script et affiche une fenêtre de géotraitement, ce qui rend l'exécution du script beaucoup plus longue.
Tanner
3

Cliquez avec le bouton droit sur une zone vide à côté de vos barres d'outils> ouvrez la fenêtre de personnalisation> cliquez sur l'onglet commandes> faites défiler vers le bas de la liste et cliquez sur [Contrôle UI]> Sélectionnez un nouveau contrôle UI> sélectionnez le type de contrôle que vous souhaitez, puis cliquez sur Créer et modifier. Cela ouvrira l'éditeur VBA pour le nouveau contrôle et vous pouvez écrire votre code à l'intérieur entendre et définir l'événement qui appelle le code. VBA est inclus avec 10 gratuitement, mais vous devrez demander un fichier de licence pour celui-ci, puis enregistrer cette licence. Appelez ESRI pour cela et ils devraient vous donner une licence gratuitement. Après 10, cela disparaîtra ...


la source