Annonce
Pour sa 21ème année, l’association GeoRezo a toujours besoin de vous !
10€ = 1 mois de frais bancaires ; 15€ = 12 mois de nom de domaine ; 30€ = 1 semaine de location des serveurs …
Retrouver nos membres bienfaiteurs
Pages: 1
- Sujet précédent - QGIS: Affichage d'infos pendant deroulement d'un traitement - Sujet suivant
#1 Thu 25 March 2021 09:40
- nico-29
- Participant assidu
- Lieu: Brest
- Date d'inscription: 2 Jun 2006
- Messages: 185
QGIS: Affichage d'infos pendant deroulement d'un traitement
Bonjour,
Pour le développement d'un plugin, j'ai un traitement qui dure assez longtemps.
Dans mon code, je fais des print dans la console pour voir où en est le traitement.
Ce que je voudrais, c'est que ces print apparaissent dans une boite de dialogue que j'affiche de façon modale au début du traitement, et que je ferme en fin de traitement.
Comment faire ça?
Merci, Nico
Hors ligne
#2 Tue 30 March 2021 09:44
- nico-29
- Participant assidu
- Lieu: Brest
- Date d'inscription: 2 Jun 2006
- Messages: 185
Re: QGIS: Affichage d'infos pendant deroulement d'un traitement
J'ai trouvé une solution avec une QProgressDialog:
Code:
prog = QProgressDialog('Working...', 'Cancel', 0, 100) prog.setValue(0) prog.setModal(True) prog.show() csvFile = open(self.config.ObjectClassesFile, "r") reader = csv.DictReader(csvFile) conv = {'Point': 'Point', 'Line': 'LineString', 'Area': 'Polygon'} i=0 for row in reader: try: prim = row['Primitives'].split(';') if int(row['Code']) < 1000: for p in prim: if p != '': prog.setValue(int(i/1000)) vlayer = QgsVectorLayer(filename+'|layername='+row['Acronym']+'|geometrytype='+conv[p], row['Acronym'], 'ogr') if vlayer.featureCount()>0: QgsProject.instance().addMapLayer(vlayer, False) grp.insertChildNode(1, QgsLayerTreeLayer(vlayer)) if prog.wasCanceled(): break except: pass grp.setExpanded(False)
La boite ProgressDialog s'affiche bien, mais reste blanc, du coup, je vois pas la barre de progression avancer au fur et à mesure du traitement...
Nico
Hors ligne
#3 Tue 30 March 2021 10:41
- Njoy
- Participant actif
- Lieu: Lyon
- Date d'inscription: 29 Nov 2018
- Messages: 89
Re: QGIS: Affichage d'infos pendant deroulement d'un traitement
Bonjour,
il faut faire evaluer cette valeur au fur et a mesure du traitement
prog.setValue(0)
0 = 0%
Edit : J'avais mal lu le code, je suis interessé par la résolution du sujet du coup
Dernière modification par Njoy (Tue 30 March 2021 11:50)
Hors ligne
#4 Tue 30 March 2021 10:41
- SANTANNA
- Moderateur
- Lieu: Angers
- Date d'inscription: 18 Jan 2008
- Messages: 3947
Re: QGIS: Affichage d'infos pendant deroulement d'un traitement
Bonjour,
Ça me rappelle un problème que j'avais eu avec une QProgressBar (j'imagine, ce doit pas être bien différent et que j'avais dû résoudre en intégrant QApplication.setOverrideCursor(Qt.BusyCursor) avant d'entrer dans la boucle puis un QApplication.restoreOverrideCursor() en sortie
(Voir https://github.com/DelazJ/MapsPrinter/b … r.py#L507) mais depuis, je suis passé à QgsFeedback (ou QgsProcessingFeedback) et ça a l'air de faire le job.
En alternative, est-ce que https://docs.qgis.org/3.16/fr/docs/pyqg … ating.html aide? Voir peut-être aussi https://docs.qgis.org/3.16/fr/docs/pyqg … tasks.html (mais un peu dans un autre registre).
En ligne
#5 Tue 30 March 2021 18:54
- nico-29
- Participant assidu
- Lieu: Brest
- Date d'inscription: 2 Jun 2006
- Messages: 185
Re: QGIS: Affichage d'infos pendant deroulement d'un traitement
En fait, ça ne marchait pas parce que avant ce bout de code qui correspond à mon traitement, je faisait afficher la fenêtre console python.
Si je ne l'affiche pas, j'ai bien la progressDialog qui s'affiche avec la barre de progression qui défile.
Nico
Hors ligne
Pages: 1
- Sujet précédent - QGIS: Affichage d'infos pendant deroulement d'un traitement - Sujet suivant