Quiero ejecutar una macro Python con QGIS 3.22.14 y python39 instalado mediante OSGEO4W y windows 11 home. El propósito es ejecutar un script automáticamente cuando abro un proyecto en QGIS.el problema con la macro Python siempre ocurre, incluso con otros scripts excepto cuando no trabajo con vector. El ejemplo sirve solo para mostrar el problema. Los errores pueden cambiar, pero siempre se da la misma situación. El código funciona en la consola o en la versión independiente, pero el código no funciona como macros Python.
Este es mi script que funciona correctamente cuando lo ejecuto en la consola Python de QGIS:
uri = "pagingEnabled='true' restrictToRequestBBOX='1' srsname='EPSG:2056' typename='ac_001_1_v1_1_disponibilita_catasto_rdpp' url='https://wfs.geo.ti.ch/?MAP=/project/wfs_ac.qgz' version='auto'"
catasto = QgsVectorLayer(uri, "ac_001_1_v1_1_disponibilita_catasto_rdpp", "WFS")
QgsProject.instance().addMapLayer(catasto)
Ejecuto el MISMO script en la macro:
Así que decidí ejecutar la versión independiente del código de trabajo en la consola que ha prooven para trabajar con un archivo por lotes. Puse todo el código bajo def openProject().
El guión es el siguiente:
def openProject():
from qgis.core import *
# Supply path to qgis install location
QgsApplication.setPrefixPath("C:/OSGeo4W/apps/qgis-ltr", True)
# Create a reference to the QgsApplication. Setting the
# second argument to False disables the GUI.
qgs = QgsApplication([], False)
# Load providers
qgs.initQgis()
# Write your code here to load some layers, use processing
# algorithms, etc.
from qgis.analysis import QgsNativeAlgorithms
import processing
from processing.core.Processing import Processing
Processing.initialize()*
QgsApplication.processingRegistry().addProvider(QgsNativeAlgorithms())
uri = "pagingEnabled='true' restrictToRequestBBOX='1' srsname='EPSG:2056' typename='ac_001_1_v1_1_disponibilita_catasto_rdpp' url='https://wfs.geo.ti.ch/?MAP=/project/wfs_ac.qgz' version='auto'"
catasto = QgsVectorLayer(uri, "ac_001_1_v1_1_disponibilita_catasto_rdpp", "WFS")
QgsProject.instance().addMapLayer(catasto)
# Finally, exitQgis() is called to remove the
# provider and layer registries from memory
qgs.exitQgis()
def saveProject():
pass
def closeProject():
pass
Muestro el script mencionado incluso como imagen:
¿Cómo resolver este problema?
Tal vez la solución debe ser el uso de la secuencia de comandos independiente y la comprensión de qué módulo para agregar en lugar de *, que no es aceptada en la función.