Bug report #7075
Create WFS Layer in stand alone python script
| Status: | Closed | ||
|---|---|---|---|
| Priority: | Normal | ||
| Assignee: | |||
| Category: | Web Services clients/WFS | ||
| Affected QGIS version: | master | Regression?: | No |
| Operating System: | ubuntu | Easy fix?: | No |
| Pull Request or Patch supplied: | No | Resolution: | |
| Crashes QGIS or corrupts data: | No | Copied to github as #: | 16159 |
Description
The following script hangs with CPU 100%:
from PyQt4.QtCore import *
from PyQt4.QtXml import *
from qgis.core import *
from qgis.gui import *
QgsApplication.setPrefixPath("/usr", True)
QgsApplication.initQgis()
sourceUri = "http://foo/bar"
layer = QgsVectorLayer(sourceUri, "My WFS layer", "WFS")
outputs following Qt warnings:
QEventLoop: Cannot be used without QApplication QDBusConnection: system D-Bus connection created before QCoreApplication. Application may misbehave. QEventLoop: Cannot be used without QApplication
Could this be because the WFS driver normally tries to create a GUI process dialog when running within the QGIS app?
History
#1
Updated by Marco Hugentobler almost 13 years ago
I think the problem is that there is no instance of QgsApplication in the script (QEventLoop: Cannot be used without QApplication). Try something like this (not tested, so only a rough indication):
def main( argv ):
theApplication = QgsApplication( argv, False )
QgsApplication.setPrefixPath( '/usr', True )
providerRegistry = QgsProviderRegistry.instance( QgsApplication.pluginPath() )
sourceUri = "http://foo/bar"
layer = QgsVectorLayer(sourceUri, "My WFS layer", "WFS")
#2
Updated by Marco Hugentobler almost 13 years ago
- Status changed from Open to Feedback
#3
Updated by Jeremy Palmer almost 13 years ago
- Status changed from Feedback to Closed
Thanks that works even, if a little non-standard. All other providers I've used don't need this.
#4
Updated by Marco Hugentobler almost 13 years ago
All other providers I've used don't need this.
It is because QNetworkAccessManager class needs a Qt event loop.