si j'essaie de charger le plugin openlayers dans une application autonome, il échoue toujours avec False, bien que les chemins soient définis et que le plugin soit disponible.
(testé sur Ubuntu 14.04, QGIS 2.4, python-2.7)
#!/usr/bin/python
# -*- coding: utf-8 -*-
import sys, os
import qgis
import qgis.gui, qgis.utils
from qgis.core import *
from PyQt4 import QtGui
# open an app
app = QtGui.QApplication(sys.argv)
# supply path to where is your qgis installed
QgsApplication.setPrefixPath(u'/usr', True)
# load providers
QgsApplication.initQgis()
# set up the plugins
qgis.utils.plugin_paths = \
['/usr/share/qgis/python/plugins',
os.path.expanduser('~/.qgis2/python/plugins'),]
qgis.utils.updateAvailablePlugins()
print qgis.utils.available_plugins
print "...load:", qgis.utils.loadPlugin(u'openlayers_plugin')
print "...start:", qgis.utils.startPlugin(u'openlayers_plugin')
print "active:\n",qgis.utils.active_plugins
canvas = qgis.gui.QgsMapCanvas()
canvas.show()
Quel est le problème ici ? post Comment récupérer des couches openlayers depuis pyqgis? fait référence à la console python intégrée, où le plugin était auparavant disponible par magie.
Merci!
Réponses:
Ce n'est jamais, enfin peut-être avec quelques hacks, ça va bien fonctionner. Les plugins utilisent normalement l'
QgisInterface
objet qui donne accès à l'interface et aux méthodes QGIS. Vous n'avez pas cet objet dans votre script autonome. La plupart des plugins, sinon tous, ne sont pas conçus pour fonctionner en dehors de QGIS comme celui-ci.la source
DummyQgisInterface
devrait être possible ...Étant très passionné par le paradigme TDD, j'ai passé du temps à créer une interface factice (basée sur certains fragments de code que j'ai trouvés sur Internet) qui permet d'appeler QGIS et les plugins QGIS de manière autonome.
L'interface que j'ai créée ressemble à ceci et je l'ai utilisée pour tous mes tests unitaires depuis:
Si vous souhaitez tester / utiliser QGIS plus l'interaction avec un plugin installé maintenant, procédez comme suit (dans votre configuration la plus simple, par exemple):
Pour d'autres exemples d'utilisation et des exemples réels sur les applications QGIS de test unitaire, vous pouvez consulter notre page github ( https://github.com/UdK-VPT/Open_eQuarter/tree/master/mole ). Les tests de dossier contiennent tous les tests unitaires (qui testent principalement les modules du package qgisinteraction, qui contient un module, qui interagit avec le plugin point_sampling_tool).
la source
utils.iface = iface
deux lignes plus tôt et j'ai dû simuler un QgsMessageBar dans l'iface ...