Re: [Qgis-developer] iterating over fields an values API 2.0
Yes, I will do that Sylvain -Message d'origine- De : Martin Dobias [mailto:wonder...@gmail.com] Envoyé : mardi 18 février 2014 16:05 À : PIERRE Sylvain Cc : qgis-developer@lists.osgeo.org Objet : Re: [Qgis-developer] iterating over fields an values API 2.0 On Tue, Feb 18, 2014 at 9:53 PM, PIERRE Sylvain sylvain.pie...@cg67.fr wrote: Yes! That's it Thanks PS: Don't you think it should be clearly documented in the pyqgis cookbook? Agreed. Would you mind preparing a pull request to fix that? Thanks Martin ___ Qgis-developer mailing list Qgis-developer@lists.osgeo.org http://lists.osgeo.org/mailman/listinfo/qgis-developer
Re: [Qgis-developer] iterating over fields an values API 2.0
Yes! That's it Thanks PS: Don't you think it should be clearly documented in the pyqgis cookbook? -Message d'origine- De : Martin Dobias [mailto:wonder...@gmail.com] Envoyé : lundi 17 février 2014 18:43 À : PIERRE Sylvain Cc : qgis-developer@lists.osgeo.org Objet : Re: [Qgis-developer] iterating over fields an values API 2.0 On Mon, Feb 17, 2014 at 10:36 PM, PIERRE Sylvain sylvain.pie...@cg67.fr wrote: When iterating over vector features like this: fields = layer.pendingFields() field_names = [field.name() for field in fields] for elem in layer.getFeatures(): atr = dict(zip(field_names, elem.attributes())) returns this: {PyQt4.QtCore.QString(u'off_set'): PyQt4.QtCore.QVariant object at 0x05115C70, PyQt4.QtCore.QString(u'code'): PyQt4.QtCore.QVariant 0x05115C70object at 0x05115BC8, PyQt4.QtCore.QString(u'pk'): PyQt4.QtCore.QVariant 0x05115BC8object at 0x05115C00, PyQt4.QtCore.QString(u'id'): PyQt4.QtCore.QVariant 0x05115C00object at 0x05115B90, PyQt4.QtCore.QString(u'annee'): PyQt4.QtCore.QVariant 0x05115B90object at 0x05115CA8, PyQt4.QtCore.QString(u'id_anom'): PyQt4.QtCore.QVariant object at 0x05115B58, PyQt4.QtCore.QString(u'fk_position'): PyQt4.QtCore.QVariant object at 0x05115C38, PyQt4.QtCore.QString(u'resolu'): PyQt4.QtCore.QVariant object at 0x05115CE0} Instead of tupple like u'off_set': 1 ... You have not set SIP api to version 2 to QString, QVariant and other Qt classes. QGIS python package tries to do that automatically for you, but if you imported PyQt4 python modules before QGIS python modules, that will not work. You have two options: 1. move import of QGIS module before PyQt4 2. keep the order of imports as is, but put these lines before import of PyQt4: import sip sip.setapi(QString, 2) sip.setapi(QVariant, 2) This is only necessary in standalone applications - inside QGIS application this initialization is done before any plugins are loaded, so this issue does not come up. Probably in qgis __init__.py there should be some code checking if there are not Qt classes imported with API v1 - in such case we could throw an exception. Regards Martin ___ Qgis-developer mailing list Qgis-developer@lists.osgeo.org http://lists.osgeo.org/mailman/listinfo/qgis-developer
Re: [Qgis-developer] iterating over fields an values API 2.0
On Tue, Feb 18, 2014 at 9:53 PM, PIERRE Sylvain sylvain.pie...@cg67.fr wrote: Yes! That's it Thanks PS: Don't you think it should be clearly documented in the pyqgis cookbook? Agreed. Would you mind preparing a pull request to fix that? Thanks Martin ___ Qgis-developer mailing list Qgis-developer@lists.osgeo.org http://lists.osgeo.org/mailman/listinfo/qgis-developer
Re: [Qgis-developer] iterating over fields an values API 2.0
On Mon, Feb 17, 2014 at 10:36 PM, PIERRE Sylvain sylvain.pie...@cg67.fr wrote: When iterating over vector features like this: fields = layer.pendingFields() field_names = [field.name() for field in fields] for elem in layer.getFeatures(): atr = dict(zip(field_names, elem.attributes())) returns this: {PyQt4.QtCore.QString(u'off_set'): PyQt4.QtCore.QVariant object at 0x05115C70, PyQt4.QtCore.QString(u'code'): PyQt4.QtCore.QVariant object at 0x05115BC8, PyQt4.QtCore.QString(u'pk'): PyQt4.QtCore.QVariant object at 0x05115C00, PyQt4.QtCore.QString(u'id'): PyQt4.QtCore.QVariant object at 0x05115B90, PyQt4.QtCore.QString(u'annee'): PyQt4.QtCore.QVariant object at 0x05115CA8, PyQt4.QtCore.QString(u'id_anom'): PyQt4.QtCore.QVariant object at 0x05115B58, PyQt4.QtCore.QString(u'fk_position'): PyQt4.QtCore.QVariant object at 0x05115C38, PyQt4.QtCore.QString(u'resolu'): PyQt4.QtCore.QVariant object at 0x05115CE0} Instead of tupple like u'off_set': 1 ... You have not set SIP api to version 2 to QString, QVariant and other Qt classes. QGIS python package tries to do that automatically for you, but if you imported PyQt4 python modules before QGIS python modules, that will not work. You have two options: 1. move import of QGIS module before PyQt4 2. keep the order of imports as is, but put these lines before import of PyQt4: import sip sip.setapi(QString, 2) sip.setapi(QVariant, 2) This is only necessary in standalone applications - inside QGIS application this initialization is done before any plugins are loaded, so this issue does not come up. Probably in qgis __init__.py there should be some code checking if there are not Qt classes imported with API v1 - in such case we could throw an exception. Regards Martin ___ Qgis-developer mailing list Qgis-developer@lists.osgeo.org http://lists.osgeo.org/mailman/listinfo/qgis-developer