ciao a tutti,
provo a porre quì un quesito che riguarda (py)qgis; volevo prevedere in un plugin, durante il trattamento di layer di dimensione importante, la stampa di un contatore per dare all'utente il senso dell'esecuzione in corso, a mò di progress bar; mi scontro però con un comportamento, per me inatteso, del comando in oggetto; mi aspettavo dall'esecuzione dei comandi (verificabile anche da console python): i = 0 for f in layer.getFeatures(): i +=1 print i una visualizzazione progressiva (ho controllato di non aver posto una virgola in fondo al comando print); invece sembra che il ciclo FOR catturi il sistema e solo alla fine vi è la stampa quasi immediata di tutta la sequenza; sto sbagliando qualcosa senza accorgermene ? grazie, ciao, giuliano _______________________________________________ [hidden email] http://lists.gfoss.it/cgi-bin/mailman/listinfo/gfoss Questa e' una lista di discussione pubblica aperta a tutti. I messaggi di questa lista non hanno relazione diretta con le posizioni dell'Associazione GFOSS.it. 666 iscritti al 22.7.2013 |
Ciao, azzardo una risposta: credo che sia semplicemente per il fatto che layer.getfFeatures() restituisce un oggetto di tipo "iterator". Gli oggetti iterator si comportano in modo particolare, e all'interno di un ciclo for tutti gli elementi vengono elaborati in modo automatico. Credo che sia questo il motivo del comportamento che hai osservato. Ti aggiungo un link che descrive gli iterator: http://stackoverflow.com/questions/9884132/understanding-pythons-iterator-iterable-and-iteration-protocols-what-exact Matteo Da: giulianc51 <[hidden email]> A: lista Gfoss <[hidden email]> Inviato: Venerdì 18 Aprile 2014 19:23 Oggetto: [Gfoss] pyqgis: layer.getFeatures() ciao a tutti, provo a porre quì un quesito che riguarda (py)qgis; volevo prevedere in un plugin, durante il trattamento di layer di dimensione importante, la stampa di un contatore per dare all'utente il senso dell'esecuzione in corso, a mò di progress bar; mi scontro però con un comportamento, per me inatteso, del comando in oggetto; mi aspettavo dall'esecuzione dei comandi (verificabile anche da console python): i = 0 for f in layer.getFeatures(): i +=1 print i una visualizzazione progressiva (ho controllato di non aver posto una virgola in fondo al comando print); invece sembra che il ciclo FOR catturi il sistema e solo alla fine vi è la stampa quasi immediata di tutta la sequenza; sto sbagliando qualcosa senza accorgermene ? grazie, ciao, giuliano _______________________________________________ [hidden email] http://lists.gfoss.it/cgi-bin/mailman/listinfo/gfoss Questa e' una lista di discussione pubblica aperta a tutti. I messaggi di questa lista non hanno relazione diretta con le posizioni dell'Associazione GFOSS.it. 666 iscritti al 22.7.2013 _______________________________________________ [hidden email] http://lists.gfoss.it/cgi-bin/mailman/listinfo/gfoss Questa e' una lista di discussione pubblica aperta a tutti. I messaggi di questa lista non hanno relazione diretta con le posizioni dell'Associazione GFOSS.it. 666 iscritti al 22.7.2013 |
In reply to this post by Giuliano Curti
Ciao Giuliano,
2014-04-18 19:23 GMT+02:00 giulianc51 <[hidden email]>: ciao a tutti, eseguendo il codice nella console python di QGIS, tu dovresti vedere ogni singolo elemento del layer, in modo continuo, senza aspettare la fine del ciclo.
No :-), basta sostituire il "print" con "emit()". Puoi definire un metodo che aggiorni la tua barra progressiva poi nel ciclo richiami il segnale connesso al metodo. Dovrebbe funzionare! Buona Pasqua!
-- Salvatore Larosa linkedIn: http://linkedin.com/in/larosasalvatore twitter: @lrssvt skype: s.larosa IRC: lrssvt on freenode _______________________________________________ [hidden email] http://lists.gfoss.it/cgi-bin/mailman/listinfo/gfoss Questa e' una lista di discussione pubblica aperta a tutti. I messaggi di questa lista non hanno relazione diretta con le posizioni dell'Associazione GFOSS.it. 666 iscritti al 22.7.2013 |
ciao Matteo e Salvatore,
rspondo quì ad entrambi perchè spero si capisca lo stesso senza duplicare traffico (e senza infrangere qualche regola di buona educazione, spero) :-) Il giorno Sat, 19 Apr 2014 08:19:06 +0100 (BST) Matteo De Stefano <[hidden email]> ha scritto: > ..... > ma in effetti comunque il tuo ciclo dovrebbe comportarsi come un > normale ciclo for,..... > ...... La progress bar che avevi in mente servirebbe solo > per contare il numero delle features, durante un'operazione di > conteggio delle stesse? questo perchè layer.featureCount() quando > provi a lanciarlo su un layer molto corposo è troppo lento? E la bar > servirebbe a mostrare che il lavoro di conteggio procede? .... mi serve a dare all'utente indicazione dello stato di svolgimento del lavoro e uso anche featureCount(): vorrei fornire l'informazione xxxxx(fatti)/yyyyy(totali); per evitare le complessità dell'uso di un widget che conosco poco mi limitavo ad usare un print nella console; Il giorno Sat, 19 Apr 2014 10:18:41 +0200 Salvatore Larosa <[hidden email]> ha scritto: > ..... > > ..... > > > eseguendo il codice nella console python di QGIS, tu dovresti vedere > ogni singolo > elemento del layer, in modo continuo, senza aspettare la fine del > ciclo. ed invece no, almeno per le prove che ho fatto (spero senza sbagliare); > ..... basta sostituire il "print" con "emit()". Puoi definire un > metodo che aggiorni la tua barra progressiva poi nel ciclo richiami > il segnale connesso al metodo. Dovrebbe funzionare! non lo conoscevo, mi documenterò e proverò, grazie :-) > Buona Pasqua! per ricambiare credo sia un pò troppo tardi, comunque vi ringrazio tantissimo per la cortesia che avete avuto, ciao, giuliano _______________________________________________ [hidden email] http://lists.gfoss.it/cgi-bin/mailman/listinfo/gfoss Questa e' una lista di discussione pubblica aperta a tutti. I messaggi di questa lista non hanno relazione diretta con le posizioni dell'Associazione GFOSS.it. 666 iscritti al 22.7.2013 |
In reply to this post by Salvatore Larosa
Il giorno Sat, 19 Apr 2014 10:18:41 +0200
Salvatore Larosa <[hidden email]> ha scritto: > Ciao Giuliano, ciao Salvatore, e scusa se (ri)rompo, ma pensavo di aver capito e invece..... > ...... basta sostituire il "print" con "emit()". la semplice sostituzione di emit() al print mi dà: "NameError: name 'emit' is not defined"; ho guardato un pò meglio ed ho visto che il comando è collegato con oggetti / segnali / slot, ma non riesco a individuare l'oggetto/segnale da interrogare: la mia necessità è semplicemente quella di stampare una variabile autoincrementante all'interno di un loop per documentarne lo stato: qualche altro hint ? (ho provato ad eseguire il loop sul dataProvider anzichè sul layer, ma il comportamento sembra identico :-( grazie mille, ciao, giuliano _______________________________________________ [hidden email] http://lists.gfoss.it/cgi-bin/mailman/listinfo/gfoss Questa e' una lista di discussione pubblica aperta a tutti. I messaggi di questa lista non hanno relazione diretta con le posizioni dell'Associazione GFOSS.it. 666 iscritti al 22.7.2013 |
Ciao Giuliano,
2014-04-22 15:27 GMT+02:00 giulianc51 <[hidden email]>: > Ciao Giuliano, si hai ragione, dovevo spendere qualche parola in più :-). emit() richiama un segnale che deve essere
deifnito in qualche parte nel codice.
in questo esempio [0] trovi in codice quello che volevo dire. Il metodo status() aggiorna la progressbar ed è connesso al segnale "mySignal".
Dovrebbe essere sufficicente e forse più chiaro :-). Puoi lanciarlo dalla console python QGIS. Saluti, -SL
-- Salvatore Larosa linkedIn: http://linkedin.com/in/larosasalvatore twitter: @lrssvt skype: s.larosa IRC: lrssvt on freenode _______________________________________________ [hidden email] http://lists.gfoss.it/cgi-bin/mailman/listinfo/gfoss Questa e' una lista di discussione pubblica aperta a tutti. I messaggi di questa lista non hanno relazione diretta con le posizioni dell'Associazione GFOSS.it. 666 iscritti al 22.7.2013 |
Free forum by Nabble | Edit this page |