Suite

Le script autonome PyQGIS ne fonctionne pas. Erreur "QGraphicsScene::addItem : l'élément a déjà été ajouté à cette scène"


J'essaie de tester un script autonome PyQGIS qui ne devrait afficher qu'un seul Shapefile. Cela semble assez simple mais ne fonctionne pas.

Voici mon script :

de PyQt4 import * de PyQt4 import * de PyQt4.QtCore import * de PyQt4.QtGui import * de qgis.core import * de qgis.gui import * de qgis.utils import * import sys import os qgishome = "C:OSGeo4W64 appsqgis" 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(couche)]) QgsApplication.exitQgis() app.exec_() app.exitQgis()

La fenêtre s'ouvre, je peux voir le fond jaune mais le calque n'est pas affiché. à la place il y a un message d'erreur :

QGraphicsScene::addItem: l'élément a déjà été ajouté à cette scène QObject::connect: Impossible de se connecter (null)::repaintRequested() à QgsMapCanvas::ref resh() QObject::connect: Impossible de se connecter (null)::layerCrsChanged( ) à QgsMapCanvas::laye rCrsChange()

Parfois, cela fait également planter python, de sorte qu'un rapport d'erreur Windows est ouvert.

J'ai chargé les variables d'environnement nécessaires, ce qui devrait être ok, car je peux importer qgis.core et qgis.gui sans problème.

est-ce que quelqu'un a une idée du problème ?


Tu es sur la bonne piste.

La chose qui vous a mordu, ce sont les barres obliques inverses dans votre chemin de préfixequi sont des séquences d'échappement en python. Faites-le de la même manière que vous le faites avec le chemin du calque et utilisez des barres obliques/plutôt.

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

Un extrait utile que vous pouvez exécuter aprèsQgsApplication.initQgis()qui s'assure que les fournisseurs sont chargés correctement est le suivant, trouvé ici.

if len(QgsProviderRegistry.instance().providerList()) == 0: raise RuntimeError('Aucun fournisseur de données disponible.')

ou vérifierlayer.isValid()pour voir si la couche était vraiment chargée correctement.

Une autre chose que vous ne voulez probablement pas faire est d'appelerQgsApplication.exitQgis()avant queapp.exec_()

Et enfin concernant les avertissements, ils ne sont pas liés à votre code et ne font pas mal du tout. Et je pense qu'ils devraient disparaître avec la version la plus récente.


Voir la vidéo: How to install camera plugin (Octobre 2021).