Eu tento desenvolver um plugin para adicionar camadas postgis ao qgis a partir de um plugin como parte do aprendizado de python.
O código para adicionar uma camada postgis é retirado do livro de receitas e funciona bem se eu executá-la no console python no qgis (se o botão OK for pressionado no resultado da caixa de diálogo == 1 e deve adicionar minha camada ao qgis).
Mas se eu executá-lo no meu plug-in, ele lança a mensagem NameError: name 'QgsDataSourceURI' não está definido. Por que recebo esse erro ao executá-lo no plug-in?
Existe uma diferença em como eu adiciono uma camada de um plugin / dentro de uma função vs do 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")
Respostas:
Porque você precisa importar classes Python antes de usá-las. Basta escrever isso no cabeçalho desse arquivo:
É diferente no QGIS Python Console porque ele carrega automaticamente as classes QGIS quando é aberto.
Observe que, se você ainda não importou a
QgsVectorLayer
classe, receberá um erro semelhante. Em vez de adicionar uma nova linha, você pode listar as classes que gostaria de importar daqgis.core
biblioteca, desta maneira:fonte
QgsDataSourceUri
.