Próbuję opracować wtyczkę, aby dodać warstwy postgis do qgis z wtyczki w ramach uczenia się języka Python.
Kod dodawania warstwy postgis jest pobierany z książki kucharskiej i działa dobrze, jeśli uruchomię go z konsoli pythona w qgis (jeśli przycisk OK zostanie naciśnięty w wyniku w oknie dialogowym == 1 i powinien dodać moją warstwę do qgis).
Ale jeśli uruchomię go z mojej wtyczki, wyśle komunikat NameError: nazwa „QgsDataSourceURI” nie jest zdefiniowana. Dlaczego dostaję ten błąd, uruchamiając go z wtyczki?
Czy jest różnica w tym, jak dodać warstwę z wtyczki / wewnątrz funkcji w porównaniu z konsolą Pythona?
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")
Odpowiedzi:
Ponieważ musisz zaimportować klasy Python przed ich użyciem. Po prostu napisz to w nagłówku tego pliku:
Inaczej jest w QGIS Python Console, ponieważ automatycznie ładuje klasy QGIS po otwarciu.
Pamiętaj, że jeśli jeszcze nie zaimportowałeś
QgsVectorLayer
klasy, pojawi się podobny błąd. Zamiast dodawać nowy wiersz, możesz wymienić klasy, które chcesz zaimportować zqgis.core
biblioteki, w ten sposób:źródło
QgsDataSourceUri
.