Suite

Pourquoi iface.activeLayer() ne fonctionne-t-il pas dans une application autonome PyQGis ?

Pourquoi iface.activeLayer() ne fonctionne-t-il pas dans une application autonome PyQGis ?


C'est mon deuxième jour sur PyQGIS. Pas certain de pourquoi couche ne renvoie rien. Quelqu'un peut-il m'aider à ce sujet?

Code:

#!/usr/bin/python de qgis.core import * de qgis.utils import * de PyQt4.QtCore import * def main(): qgis_prefix="/usr" QgsApplication.setPrefixPath(qgis_prefix, True) QgsApplication.initQgis() app = QgsApplication([], False) uri = "elevp.csv?delimiter=%s&xField=%s&yField=%s&elevField=%s" % (";","x","y","elev") vlayer = QgsVectorLayer(uri, "test", "delimitedtext") QgsMapLayerRegistry.instance().addMapLayer(vlayer) #print(QgsMapLayerRegistry.instance().mapLayers()) #iface.mapCanvas().setSelectionColor( QColor("red") ) layer = iface.activeLayer() print(layer) # Exécuter les principaux codes wrapper main()

Vous créez une application pyqgis autonome. Dans une application autonome, il n'y a pasJe fais face.

Iface est fourni par l'application de bureau QGIS pour donner accès à certains éléments internes de l'application de bureau. Comme il n'y a pas d'application de bureau dans l'application standalaone (vous n'utilisez que les bibliothèques QGIS), il n'y a pas non plus de possibilité d'avoir un iface disponible pour donner accès à ce logiciel inexistant.

Ou en d'autres termes, dans l'application de bureau QGIS, iface.activeLayer() donne accès à la couche actuellement sélectionnée dans la légende. Par défaut, il n'y a pas de légende dans votre application autonome, il n'y a donc pas de couche active.

Donc la question est en fait quelle couche veux tu? Pour la couche que vous avez créée, vous avez déjà une référence dansvlayervous devriez donc continuer à l'utiliser.


Voir la vidéo: QGIS For Python programmers: The iface object