banniere

Le portail francophone de la géomatique


Toujours pas inscrit ? Mot de passe oublié ?
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oubliĂ© ?

#1 Thu 06 July 2017 15:36

Groflo
Participant actif
Date d'inscription: 3 Jun 2013
Messages: 84

QGIS / Python: pendant exécution du script, donner de l'info ...

Bonjour,

J'ai rĂ©alisĂ© un script perso sur QGis, qui peut potentiellement tourner pendant longtemps, puisqu'il contacte un site internet avec des paramĂštres, rĂ©cupĂšre le rĂ©sultat, l'Ă©crit dans un fichier, etc. Ça ne prend que quelques millisecondes, mais si je lance plusieurs centaines ou milliers de requĂȘtes, ça peut prendre des heures.
Or, pendant ce temps, pour l'utilisateur, l'Ă©cran reste tel quel, avec l'icĂŽne de souris qui tourne et qui attend. Et il ne sait pas oĂč ça en est, s'il lui reste beaucoup Ă  attendre, si ça a bugguĂ© ou non, etc.

L'idĂ©al pour moi serait de faire afficher des choses directement dans le journal, qui est la fenĂȘtre que l'utilisateur voit systĂ©matiquement, mais je ne sais pas comment ni si c'est faisable.
Sinon, toute alternative, permettant par exemple de faire un print() à chaque boucle (disant par exemple ligne x traitée sur y lignes au total) serait la bienvenue.

Je le fais déjà, mais ça ne s'affiche que dans la console python, or l'utilisateur ne va pas forcément avoir sa console ouverte pour regarder.

De mĂȘme (mais c'est secondaire), je ne sais pas faire ouvrir une fenĂȘtre Ă  la fin de l'exĂ©cution du script pour dire par exemple que tout s'est bien passĂ© ou au contraire pointer les erreurs Ă©ventuelles, etc.

Merci par avance !

Dernière modification par Groflo (Thu 06 July 2017 15:37)

Hors ligne

 

#2 Thu 06 July 2017 16:45

YoLecomte
Participant assidu
Lieu: Epinal
Date d'inscription: 7 Jul 2015
Messages: 275

Re: QGIS / Python: pendant exécution du script, donner de l'info ...

Bonjour,

Si vous connaissez bien python, tournez vous vers PyQt qui vous permettra de faire tout ça à volonté.
Si vous ĂȘtes pressĂ© (ou flemmard), il existe les QgsMessageBar : http://docs.qgis.org/testing/en/docs/py … ating.html qui sont trĂšs simple Ă  utiliser. Le lien ci dessus contient toutes les rĂ©ponses Ă  vos questions (log, message,progress bar,...)

Avec Qt par exemple pour afficher une fenĂȘtre de message, j'utilise la fonction suivante :

Code:

from PyQt4.QtGui import QMessageBox

def showdialog (text, title):
        """fonction permettant d'afficher des messages a l'utilisateur"""
        msg = QMessageBox()
        msg.setIcon(QMessageBox.Warning)
        msg.setText(text)
        msg.setWindowTitle(title)
        msg.setStandardButtons(QMessageBox.Ok)
        msg.exec_()

Avec PyQt on pourrait imaginer avoir une fenĂȘtre qui s'ouvre au dĂ©but de la boucle et qui contient une barre de progression qui Ă©volue en fonction de l'avancĂ© du script...

Dernière modification par YoLecomte (Thu 06 July 2017 16:49)

Hors ligne

 

#3 Thu 06 July 2017 16:49

Sylther
Participant assidu
Lieu: Mpl
Date d'inscription: 17 May 2016
Messages: 275
Site web

Re: QGIS / Python: pendant exécution du script, donner de l'info ...

Bonjour,

Pour afficher l'info dans un bandeau, regardes  ici.

Si c'est une appli en console, la fonction print ou print() selon ta version de python est ton amie.

Si tu veux vraiment une boite de dialogue, regardes du coté des messageboxes de QT
Du genre :

Code:

 QtGui.QMessageBox.critical(None, self.tr("MacIntosh user detected"), self.tr("No connexion to database."))

++
S.


"Un.e géographe ne se perd jamais, iel cherche une nouvelle route."

Hors ligne

 

#4 Thu 06 July 2017 17:32

Groflo
Participant actif
Date d'inscription: 3 Jun 2013
Messages: 84

Re: QGIS / Python: pendant exécution du script, donner de l'info ...

Merci pour ces réponses trÚs éclairantes.

Je commence mieux Ă  voir ce qui est faisable et finalement, les messages dans le bandeau peuvent une solution. NĂ©anmoins, l'idĂ©al resterait quand mĂȘme l'affichage dans le journal affichĂ© lorsqu'on lance le script par l'intermĂ©diaire de la boite Ă  outils de traitement (voir l'imprim Ă©cran en PJ).
Une idée ? Sachant que de ce que j'en ai compris, la partie "logging" présentée dans le lien que vous m'avez donné fait du log, mais pas sur le log du script comme je le voudrais



Fichier(s) joint(s) :
Pour accéder aux fichiers vous devez vous inscrire.

Hors ligne

 

#5 Thu 06 July 2017 17:53

SANTANNA
Moderateur
Lieu: Angers
Date d'inscription: 18 Jan 2008
Messages: 4187

Re: QGIS / Python: pendant exécution du script, donner de l'info ...

Bonjour,
de l'eau au moulin peut-ĂȘtre ? http://docs.qgis.org/2.14/fr/docs/user_ … h-the-user

Hors ligne

 

#6 Thu 06 July 2017 18:53

Sylther
Participant assidu
Lieu: Mpl
Date d'inscription: 17 May 2016
Messages: 275
Site web

Re: QGIS / Python: pendant exécution du script, donner de l'info ...

Je viens de comprendre en regardant ta PJ.

Je ne sais pas comment faire vu que je n'utilise jamais les scripts, mais développe des extensions.

En regardant un code téléchargé dans la bibliothÚque de script utilisateur, j'ai vu cette instruction :

Code:

progress.setText(u'EPSG is unknown ')

M'est avis que cela pourrait bien ĂȘtre ce que tu cherches.

Par ailleurs, si tu veux faire du log en dur dans un fichier texte et/ou en console, je te conseille d'aller regarder du module logging de python, et de cette page qui explique bien comment fonctionne le bouzin smile


"Un.e géographe ne se perd jamais, iel cherche une nouvelle route."

Hors ligne

 

#7 Fri 07 July 2017 09:28

Groflo
Participant actif
Date d'inscription: 3 Jun 2013
Messages: 84

Re: QGIS / Python: pendant exécution du script, donner de l'info ...

Sylther a écrit:

En regardant un code téléchargé dans la bibliothÚque de script utilisateur, j'ai vu cette instruction :

Code:

progress.setText(u'EPSG is unknown ')

M'est avis que cela pourrait bien ĂȘtre ce que tu cherches.


Super, c'est exactement ça ! Merci beaucoup, ça répond complÚtement à ma demande. Merci à tous !

Hors ligne

 

Pied de page des forums

Copyright Association GeoRezo