Intento desarrollar un complemento para agregar capas postgis a qgis desde un complemento como parte del aprendizaje de Python.
El código para agregar una capa postgis se toma del libro de cocina y funciona bien si lo ejecuto desde la consola de Python dentro de qgis (si se presiona el botón OK en el cuadro de diálogo resultado == 1 y debería agregar mi capa a qgis).
Pero si lo ejecuto desde mi complemento, arroja el mensaje NameError: el nombre 'QgsDataSourceURI' no está definido. ¿Por qué aparece ese error ejecutándolo desde el complemento?
¿Hay alguna diferencia en cómo agrego una capa desde un complemento / dentro de una función frente a la consola de 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")
Respuestas:
Porque necesita importar clases de Python antes de usarlas. Simplemente escriba esto en el encabezado de ese archivo:
Es diferente en la consola QGIS Python porque carga automáticamente las clases QGIS cuando se abre.
Tenga en cuenta que si aún no ha importado la
QgsVectorLayer
clase, obtendrá un error similar. En lugar de agregar una nueva línea, puede enumerar las clases que desea importar de laqgis.core
biblioteca de esta manera:fuente
QgsDataSourceUri
.