Viac

Samostatný skript PyQGIS nefunguje. Chyba „QGraphicsScene :: addItem: položka už bola na túto scénu pridaná“


Pokúšam sa otestovať samostatný skript PyQGIS, ktorý by mal zobraziť iba jeden súbor Shapefile. Znie to celkom jednoducho, ale nefunguje.

Tu je môj scenár:

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

Okno sa otvára, vidím žlté pozadie, ale vrstva sa nezobrazuje. namiesto toho sa zobrazí chybové hlásenie:

QGraphicsScene :: addItem: položka už bola na túto scénu pridaná QObject :: connect: Cannot connect (null) :: repaintRequested () to QgsMapCanvas :: ref resh () QObject :: connect: Cannot connect (null) :: layerCrsChanged ( ) na QgsMapCanvas :: laye rCrsChange ()

Niekedy to tiež spôsobí zlyhanie pythonu, takže sa otvorí hlásenie o chybe systému Windows.

Načítal som potrebné premenné prostredia, ktoré by mali byť v poriadku, pretože môžem bez problémov importovať súbory qgis.core a qgis.gui.

má niekto predstavu v čom je problém?


Ste na dobrej ceste.

To, čo vás kouslo, sú spätné lomky v ceste k predponámčo sú únikové sekvencie v pythone. Urobte to rovnakým spôsobom, ako to urobíte s cestou vrstvy a použite lomky/namiesto toho.

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

Užitočný úryvok, za ktorým môžete bežaťQgsApplication.initQgis ()ktorý zaisťuje správne načítanie poskytovateľov, je uvedený tu.

if len (QgsProviderRegistry.instance (). providerList ()) == 0: zvýšiť RuntimeError ('Nie sú k dispozícii žiadni poskytovatelia údajov.')

alebo skontrolovaťlayer.isValid ()aby sme zistili, či bola vrstva skutočne načítaná správne.

Ďalšia vec, ktorú pravdepodobne nechcete urobiť, je zavolaťQgsApplication.exitQgis ()predtýmapp.exec_ ()

A nakoniec, týkajúce sa varovaní, nesúvisia s vaším kódom a vôbec neubližujú. A myslím si, že s najnovším vydaním by mali byť preč.


Pozri si video: Tutorial Qt Creator - QGraphicsView Animación en C++ (Október 2021).