Más

La secuencia de comandos independiente de PyQGIS no funciona. Error "QGraphicsScene :: addItem: el elemento ya se ha agregado a esta escena"

La secuencia de comandos independiente de PyQGIS no funciona. Error


Intento probar una secuencia de comandos independiente de PyQGIS que solo debería mostrar un Shapefile. Suena bastante simple pero no funciona.

Aquí está mi guión:

desde PyQt4 importar * desde PyQt4 importar * desde PyQt4.QtCore importar * desde PyQt4.QtGui importar * desde qgis.core importar * desde qgis.gui importar * desde qgis.utils importar * importar sys importar os qgishome = "C:  OSGeo4W64  apps  qgis "app = QgsApplication ([], True) QgsApplication.setPrefixPath (qgishome, True) QgsApplication.initQgis () canvas = QgsMapCanvas () canvas.setCanvasColor (Qt.yellow) canvas.enableAntiAliasing (True) canvas.show () layer = QgsVectorLayer (r "C: /daten/polygons.shp", "Testdaten", "ogr") reg = QgsMapLayerRegistry.instance () reg.addMapLayer (layer) canvas.setExtent (layer.extent ()) canvas.setLayerSet ([QgsMapCanvasLayer (capa)]) QgsApplication.exitQgis () app.exec_ () app.exitQgis ()

Se abre la ventana, puedo ver el fondo amarillo pero no se muestra la capa. En segundo lugar, hay un mensaje de error:

QGraphicsScene :: addItem: el elemento ya ha sido agregado a esta escena QObject :: connect: No se puede conectar (nulo) :: repaintRequested () a QgsMapCanvas :: ref resh () QObject :: connect: No se puede conectar (nulo) :: layerCrsChanged ( ) a QgsMapCanvas :: laye rCrsChange ()

A veces, esto también hace que Python se bloquee, por lo que se abre un informe de error de Windows.

Cargué las variables ambientales necesarias, que deberían estar bien, ya que puedo importar qgis.core y qgis.gui sin problemas.

¿Alguien tiene una idea de cuál es el problema?


Estás en el camino correcto.

Lo que te mordió son las barras invertidas en tu ruta de prefijoque son secuencias de escape en Python. Simplemente hágalo de la misma manera que lo hace con la ruta de la capa y use barras/en lugar de.

qgishome = "C: / OSGeo4W64 / apps / qgis"

Un fragmento útil que puede ejecutar despuésQgsApplication.initQgis ()que asegura que los proveedores se carguen correctamente es el siguiente, que se encuentra aquí.

if len (QgsProviderRegistry.instance (). providerList ()) == 0: raise RuntimeError ('No hay proveedores de datos disponibles.')

o comprobarlayer.isValid ()para ver si la capa se cargó realmente correctamente.

Otra cosa que probablemente no quieras hacer es llamarQgsApplication.exitQgis ()antes deapp.exec_ ()

Y finalmente, en cuanto a las advertencias, no están relacionadas con su código y no duelen en absoluto. Y creo que deberían desaparecer con el lanzamiento más reciente.


Ver el vídeo: QGIS Python PyQGIS - Create a new shapefile