Mer

Legger til PostGIS-lag fra QGIS Python-plugin


Jeg prøver å utvikle et plugin for å legge til postgis-lag til qgis fra et plugin som en del av å lære python.

Koden for å legge til et postgis-lag er hentet fra kokeboken og fungerer bra hvis jeg kjører den fra python-konsollen i qgis (Hvis knappen OK trykkes i dialogboksen resultat == 1 og skal legge laget mitt til qgis).

Men hvis jeg kjører det fra pluginet mitt, kaster det meldingen NameError: navnet 'QgsDataSourceURI' er ikke definert. Hvorfor får jeg den feilen ved å kjøre den fra programtillegget?

Er det en forskjell hvordan jeg legger til et lag fra et plugin / inne i en funksjon vs fra python-konsollen?

def run (selv): "" "Kjør metoden som utfører alt det virkelige arbeidet" "" # vis dialogen self.dlg.show () # Kjør dialoghendelsens loopresultat = self.dlg.exec_ () # Se om OK ble trykket på hvis resultat == 1: # Gjør noe nyttig her - slett linjen som inneholder pass og # erstatt koden din. uri = QgsDataSourceURI () uri.setConnection ("localhost", "5432", "test", "postgres", "postgres") #set database schema, table name, geometry column and optionaly subset (WHERE clause) uri.setDataSource ( "grunnleggende", "byer", "geom") # Definere lagnavn og lagtype for QGIS? vlayer = QgsVectorLayer (uri .uri (), "byer", "postgres")

Fordi du må importere Python-klasser før du bruker dem. Bare skriv dette i overskriften til den filen:

fra qgis.core importerer QgsDataSourceURI

Det er annerledes i QGIS Python Console fordi den automatisk laster inn QGIS-klasser når den åpnes.

Merk at hvis du ikke har importertQgsVectorLayerklasse ennå, får du en lignende feil. I stedet for å legge til en ny linje, kan du liste opp klassene du vil importere fraqgis.corebibliotek, på denne måten:

fra qgis.core importerer QgsVectorLayer, QgsDataSourceURI