Python itemData

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
10 messages Options
Reply | Threaded
Open this post in threaded view
|

Python itemData

NicoPez
Buon pomeriggio, è un po' che sto sviluppando il mio plugin e dato che sono alle prime armi sto cercando di risolvere i problemi di volta in volta.

Ora ho questo problemino:

        i = self.comboBox.currentIndex()
        if i < 0:
            QMessageBox.information(None, "SearchParcels2", "Nessun Layer Caricato")
            return None
        layerId = self.comboBox.itemData(i)
        QMessageBox.information(None, "DEBUG:", str(layerId))
        layer = QgsMapLayerRegistry.instance().mapLayer(layerId)

non riesco a capire perché il layerId nel QMessageBox.information mi da come risultato "None". Le ho provate tutte.

Ho caricato diversi layer in GIS, infatti cambiando voce nella comboBox cambia il valore "i". Ma una volta che questo lo vado a mettere in self.comboBox.itemData(i) non so che succede. Ogni layer che io scelga è così.

Mi potete dare delucidazioni su significato di itemData? Forse mi sfugge qualcosa.

Grazie
Reply | Threaded
Open this post in threaded view
|

Re: Python itemData

Luigi Pirelli-2
perche' forse itemData deve venir riempicon con setData... quel che
leggi nel combobox e' il valore text()... in data puoi ficcarci quel
che voi e se non ci ficchi niente esplicitamente niente ci trovi.

prova a vedere se e' questo il problema

ciao Luigi Pirelli

2014-08-01 14:20 GMT+02:00 NicoPez <[hidden email]>:

> Buon pomeriggio, è un po' che sto sviluppando il mio plugin e dato che sono
> alle prime armi sto cercando di risolvere i problemi di volta in volta.
>
> Ora ho questo problemino:
>
>         i = self.comboBox.currentIndex()
>         if i < 0:
>             QMessageBox.information(None, "SearchParcels2", "Nessun Layer
> Caricato")
>             return None
>         layerId = self.comboBox.itemData(i)
>         QMessageBox.information(None, "DEBUG:", str(layerId))
>         layer = QgsMapLayerRegistry.instance().mapLayer(layerId)
>
> non riesco a capire perché il layerId nel QMessageBox.information mi da come
> risultato "None". Le ho provate tutte.
>
> Ho caricato diversi layer in GIS, infatti cambiando voce nella comboBox
> cambia il valore "i". Ma una volta che questo lo vado a mettere in
> self.comboBox.itemData(i) non so che succede. Ogni layer che io scelga è
> così.
>
> Mi potete dare delucidazioni su significato di itemData? Forse mi sfugge
> qualcosa.
>
> Grazie
>
>
>
> --
> View this message in context: http://gfoss-geographic-free-and-open-source-software-italian-mailing.3056002.n2.nabble.com/Python-itemData-tp7589041.html
> Sent from the Gfoss -- Geographic Free and Open Source Software - Italian mailing list mailing list archive at Nabble.com.
> _______________________________________________
> [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+40 iscritti al 5.6.2014
_______________________________________________
[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+40 iscritti al 5.6.2014
Reply | Threaded
Open this post in threaded view
|

Re: Python itemData

NicoPez
E come faresti?

Notavo che nel plugin a cui mi sono ispirato non c'è.. come farà a lui a funzionare non lo so proprio. :D
Reply | Threaded
Open this post in threaded view
|

Re: Python itemData

Luigi Pirelli-2
intanto leggiti

http://qt-project.org/doc/qt-4.8/qcombobox.html

deduco che magari puo' servirti qualcosa come il metodo currentText()
(da castare)... questo alla cieca, senza sapere nulla di quelche hai
scrittonel plugin

2014-08-01 15:22 GMT+02:00 NicoPez <[hidden email]>:

> E come faresti?
>
> Notavo che nel plugin a cui mi sono ispirato non c'è.. come farà a lui a
> funzionare non lo so proprio. :D
>
>
>
> --
> View this message in context: http://gfoss-geographic-free-and-open-source-software-italian-mailing.3056002.n2.nabble.com/Python-itemData-tp7589041p7589043.html
> Sent from the Gfoss -- Geographic Free and Open Source Software - Italian mailing list mailing list archive at Nabble.com.
> _______________________________________________
> [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+40 iscritti al 5.6.2014
_______________________________________________
[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+40 iscritti al 5.6.2014
Reply | Threaded
Open this post in threaded view
|

Re: Python itemData

Giuliano Curti
Il giorno Fri, 1 Aug 2014 15:37:22 +0200
Luigi Pirelli <[hidden email]> ha scritto:

ciao Nico e Luigi,


> intanto leggiti
>
> http://qt-project.org/doc/qt-4.8/qcombobox.html

credo che Luigi abbia ragione; devi popolare la comboBox ed io non vedo
dove lo fai in quella porzione di codice che hai postato;
devi prima inserire i valori con i comandi
        comboBox.addItem()
        comboBox.addItems()
        comboBox.insertItem()
        comboBox.insertItems()
(li trovi documentati alla pagina che ti ha indicato Luigi); dopo di
che potrai prelevare quello che ti interessa;


spero ti sia di aiuto, 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+40 iscritti al 5.6.2014
Reply | Threaded
Open this post in threaded view
|

Re: Python itemData

NicoPez
Ciao, in realtà la comboBox l'ho già popolata con questo codice:

    def chooseLayer(self):
        layerList = []     # crea una lista vuota
        self.comboBox.clear()     # svuota la lista del combo box
        layerList = self.getLayerNames()     # a layerList assegna il risultato della procedura getLayerNames()
        self.comboBox.addItems(layerList)
        self.FoglioLine.clear()
        self.ParticelLine.clear()
        self.OnSelectBoxClicked()
        return

    # Get the list of layers (list of names) in QgsMapLayerRegistry
    def getLayerNames(self):
        layermap = QgsMapLayerRegistry.instance().mapLayers()  
        layerLst = []
        for i, layer in layermap.iteritems():
            if layer.type() == QgsMapLayer.VectorLayer:    # considera solo i layers vettoriali
                layerLst.append( unicode( layer.name() ) )   # prende il nome di ogni layer a lo aggiunge alla lista layerLst
        return layerLst

nel frattempo sto cmq leggendo il la pagina che mi avete indicato :) Grazie
Reply | Threaded
Open this post in threaded view
|

Re: Python itemData

Giuliano Curti
Il giorno Fri, 1 Aug 2014 06:57:32 -0700 (PDT)
NicoPez <[hidden email]> ha scritto:

ciao Nico,


> Ciao, in realtà la comboBox l'ho già popolata con questo codice:

e allora scusa per il tentativo andato a vuoto :-(

però
>         layerLst.append( unicode( layer.name() ) )   # prende
                                    ^^^^^^^^^^^^
>         layerList = self.getLayerNames()     # a layerList assegna il
                      ^^^^^^^^^^^^^^^^^^^^
>         self.comboBox.addItems(layerList)
                        ^^^^^^^^^^^^^^^^^^^
da queste tre righe (NB: ho invertito l'ordine) sembra che metti nella
comboBox i nomi dei layer; quì invece
>         layerId = self.comboBox.itemData(i)
          ^^^^^^^
sembra che vuoi estrarne l'ID: ho visto male ?


domanda diversa: parli di particelle, è un plugin che si occupa di dati
catastali? hai voglia di spiegare (o spiegarmi in pvt) l'obiettivo del
tuo plugin: mi potrebbe interessare;

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+40 iscritti al 5.6.2014
Reply | Threaded
Open this post in threaded view
|

Re: Python itemData

NicoPez
Esatto, dall'ID preso da un elemento della ComboBox dovrei estrapolare l'"ItemData" ma come risultato ho nessun elemento. Da quanto ho capito itemData vuole un argomento "QVariant", mentre "i" è un element "int". Però non capisco come posso fare a prendere i Data di un layer e utilizzarli poi per la voce successiva.

        layerId = self.comboBox.itemData(i)
        layer = QgsMapLayerRegistry.instance().mapLayer(layerId)

Sì, è un plugin per il catasto. Prendendo spunto da QuickFinder (che invece è molto più complesso nella sua programmazione) volevo fare una ricerca incrociata cercando foglio (campo1) e particella (campo2) da un layer catastale.
Reply | Threaded
Open this post in threaded view
|

Re: Python itemData

Giuliano Curti
Il giorno Fri, 1 Aug 2014 07:56:51 -0700 (PDT)
NicoPez <[hidden email]> ha scritto:

> ..... Però non capisco come posso fare a prendere i Data di un layer
> e utilizzarli poi per la voce successiva.
>
>         layerId = self.comboBox.itemData(i)
>         layer = QgsMapLayerRegistry.instance().mapLayer(layerId)

scusa, probabilmente non è l'errore che tu cerchi, però ti segnalavo che
tu nella combo metti i NOMI dei layer, non gli ID! almeno così mi
sembra :-)

 
> Sì, è un plugin per il catasto. Prendendo spunto da QuickFinder (che
> invece è molto più complesso nella sua programmazione) volevo fare
> una ricerca incrociata cercando foglio (campo1) e particella (campo2)
> da un layer catastale.

tienici(mi) informati(o) allora :-)


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+40 iscritti al 5.6.2014
Reply | Threaded
Open this post in threaded view
|

Re: Python itemData

Giuseppe Sucameli
In reply to this post by NicoPez

Ciao,

tu stai recuperando i nomi dei layer e popolando la combobox con quelli, quindi ogni elemento (item) della combobox avrà soltanto la proprietà text.

Usando il comando
combobox.setItemData(index, data)
è possibile associare delle informazioni aggiuntive (data) ad ogni item della combobox (in posizione index) così che con
combobox.itemData(index)
tu possa recuperarle successivamente.

Ti servono quindi anche gli id dei layer, da usare come item data, non solo il nome: se i dati non li metti dentro la combobox, poi non puoi decidere di recuperarli.

Saluti.

Sent from mobile. Sorry for being short.
--
Giuseppe Sucameli

Il 01/ago/2014 16:56 "NicoPez" <[hidden email]> ha scritto:
Esatto, dall'ID preso da un elemento della ComboBox dovrei estrapolare
l'"ItemData" ma come risultato ho nessun elemento. Da quanto ho capito
itemData vuole un argomento "QVariant", mentre "i" è un element "int". Però
non capisco come posso fare a prendere i Data di un layer e utilizzarli poi
per la voce successiva.

        layerId = self.comboBox.itemData(i)
        layer = QgsMapLayerRegistry.instance().mapLayer(layerId)

Sì, è un plugin per il catasto. Prendendo spunto da QuickFinder (che invece
è molto più complesso nella sua programmazione) volevo fare una ricerca
incrociata cercando foglio (campo1) e particella (campo2) da un layer
catastale.



--
View this message in context: http://gfoss-geographic-free-and-open-source-software-italian-mailing.3056002.n2.nabble.com/Python-itemData-tp7589041p7589048.html
Sent from the Gfoss -- Geographic Free and Open Source Software - Italian mailing list mailing list archive at Nabble.com.
_______________________________________________
[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+40 iscritti al 5.6.2014

_______________________________________________
[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+40 iscritti al 5.6.2014