J'essaie de développer un plugin pour ajouter des couches postgis aux qgis à partir d'un plugin dans le cadre de l'apprentissage de python.
Le code pour ajouter une couche postgis est tiré du livre de recettes et fonctionne correctement si je l'exécute à partir de la console python dans qgis (si le bouton OK est enfoncé dans la boîte de dialogue, résultat == 1 et devrait ajouter ma couche à qgis).
Mais si je l'exécute à partir de mon plugin, il envoie le message NameError: le nom 'QgsDataSourceURI' n'est pas défini. Pourquoi ai-je cette erreur en l'exécutant à partir du plugin?
Y a-t-il une différence entre l'ajout d'une couche à partir d'un plugin / à l'intérieur d'une fonction et celle de la console python?
def run(self):
"""Run method that performs all the real work"""
# show the dialog
self.dlg.show()
# Run the dialog event loop
result = self.dlg.exec_()
# See if OK was pressed
if result == 1:
# Do something useful here - delete the line containing pass and
# substitute with your code.
uri = QgsDataSourceURI()
uri.setConnection("localhost", "5432", "test", "postgres", "postgres")
#set database schema, table name, geometry column and optionaly subset(WHERE clause)
uri.setDataSource ("basic", "cities", "geom")
# Defining the layer name and layer type for QGIS?
vlayer=QgsVectorLayer (uri .uri() ,"cities","postgres")
Réponses:
Parce que vous devez importer des classes Python avant de les utiliser. Écrivez simplement ceci dans l'en-tête de ce fichier:
C'est différent dans la console QGIS Python car il charge automatiquement les classes QGIS lors de son ouverture.
Notez que si vous n'avez pas encore importé la
QgsVectorLayer
classe, vous obtiendrez une erreur similaire. Au lieu d'ajouter une nouvelle ligne, vous pouvez lister les classes que vous souhaitez importer de laqgis.core
bibliothèque, de cette façon:la source
QgsDataSourceUri
.