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

GEODATA DAYS 2024

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

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).

Hors 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

 

Pied de page des forums

Powered by FluxBB