Ich versuche, ein Plugin zu entwickeln, um QGIS Postgis-Ebenen von einem Plugin als Teil des Lernens von Python hinzuzufügen.
Der Code zum Hinzufügen einer Postgis-Ebene stammt aus dem Kochbuch und funktioniert einwandfrei, wenn ich ihn über die Python-Konsole in qgis ausführe (Wenn die Schaltfläche OK im Dialogfeld Ergebnis == 1 gedrückt wird und meine Ebene zu qgis hinzugefügt werden soll).
Wenn ich es jedoch von meinem Plugin aus starte, wird die Meldung NameError ausgegeben: Der Name 'QgsDataSourceURI' ist nicht definiert. Warum wird dieser Fehler vom Plugin ausgeführt?
Gibt es einen Unterschied, wie ich eine Ebene aus einem Plugin / innerhalb einer Funktion hinzufüge, gegenüber der Python-Konsole?
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")
Antworten:
Weil Sie Python-Klassen importieren müssen, bevor Sie sie verwenden können. Schreiben Sie dies einfach in die Überschrift dieser Datei:
In der QGIS Python Console ist dies anders, da beim Öffnen automatisch QGIS-Klassen geladen werden.
Beachten Sie
QgsVectorLayer
, dass ein ähnlicher Fehler angezeigt wird, wenn Sie die Klasse noch nicht importiert haben . Anstatt eine neue Zeile hinzuzufügen, können Sie die Klassen, die Sie aus derqgis.core
Bibliothek importieren möchten, folgendermaßen auflisten :quelle
QgsDataSourceUri
.