9 avr. 2021

[Dynamo+=Python] Un exemple de barre de Progression (MAJ 09/2022)

 





Il peut arriver que pour certaines tâches un suivi de la progression soit utile (sur certaines longues opérations cela peut éviter la tentation du gestionnaire de tâche....).
Voici un peu plus de détails, pour faire suite à cet article.

if this article is not in your language, use the Google Translate widget (bottom of page for Mobile version)


Voici un exemple d'implémentation d'une barre de progression, celle-ci s'effectue au travers d'une liste d'opérations à traiter.

  1. Le chargement


    plusieurs façons de charger le module :

    • soit en important la librairie dll (uniquement avec IronPython)



    
    from System.IO import Path
    fileDll = IN[0]
    folderDll = Path.GetDirectoryName(fileDll)
    sys.path.append(folderDll)
    clr.AddReferenceToFileAndPath(fileDll)
    import ProgressBarUtils
    from ProgressBarUtils import ProgressBarUtils as pgb
    


    • soit en important le fichier script Python "ProgressBarUtils.py" comme module (IronPython ou CPython/Pythonnet)
                    
      import sys
      import clr
      import System
      
      from System.IO import Path
      file_PathPy = IN[0]
      folderPy = Path.GetDirectoryName(file_PathPy)
      sys.path.append(folderPy)
      import ProgressBarUtils
      from ProgressBarUtils import ProgressBarUtils as pgb
      



    • soit, en implémentent le code source dans un nœud Python et affectant la Classe à la variable OUT  (IronPython ou CPython/Pythonnet)


    Note: les moteurs Pythons des 2 nœuds doivent être identique



  2. L'implémentation (constructeur)


    Le constructeur de la barre de progression s'effectue au travers d'une liste d'opérations à traiter et d'un Context Manager de la manière suivante :

with pgb.MyProgressBroadcaster(nombreTotalExecution, "Titre Fentre") as broadcaster:

    Puis la méthode broadcaster.onChange.next_p() permet d'incrémenter la barre de progression, via un custom "event hook", plus de détail ici)

#example of list to processing
lstProcessing = list(range(1000))
out = []
with pgb.MyProgressBroadcaster(len(lstProcessing), "Title Of ProgressBar") as broadcaster:
    for i in lstProcessing:
        #some operations with long duration
        #
        #
        # increment Progress Bar via EventHook
        broadcaster.onChange.next_p()


    3. Message personnalisé (MAJ 09/2022)

l'ajout d'un message personnalisé sous la barre de progression est possible en passant le message en argument comme suivant
broadcaster.onChange.next_p("my message") 








Le Projet ainsi que les DLLs pour IronPython2 se trouvent ici
Note : un bouton pour quitter la fenêtre est présent dans le code mais volontairement désactivé


Aperçu avec un exemple de plan de cotation plancher (maquette Structure liée)

0 commentaires:

Enregistrer un commentaire