Nous utilisons des cookies pour vous garantir la meilleure expérience sur notre site. Si vous continuez à utiliser ce dernier, nous considèrerons que vous acceptez l'utilisation des cookies. J'ai compris ! ou En savoir plus !.
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é ?

Annonce

Printemps des cartes 2024

#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: 239

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 actif
Lieu: Mtp
Date d'inscription: 17 May 2016
Messages: 146

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.

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: 3807

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 actif
Lieu: Mtp
Date d'inscription: 17 May 2016
Messages: 146

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

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

Powered by FluxBB