Pages: 1
- Sujet précédent - QGIS / Python: pendant exécution du script, donner de l'info ... - Sujet suivant
#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: 256
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
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…
Hors ligne
#5 Thu 06 July 2017 17:53
- SANTANNA
- Moderateur
- Lieu: Angers
- Date d'inscription: 18 Jan 2008
- Messages: 3883
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
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
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 ...
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
Pages: 1
- Sujet précédent - QGIS / Python: pendant exécution du script, donner de l'info ... - Sujet suivant