Solo estoy tratando de entender la arquitectura de un complemento QGIS creado con QGIS Plugin Builder, así como el flujo de trabajo y la vinculación entre los archivos generados. Si es posible, preferiría un diagrama.
También sería útil saber qué hacen las siguientes funciones en el código de Python. Soy nuevo en la creación del complemento QGIS.
__init__( self, iface )
tr( self, message )
add_action( self )
initGui( self )
unload( self )
run( self )
qgis
python
qgis-plugins
pyqgis
Usuario123
fuente
fuente
iface
(la interfaz QGIS). Me parece que si conoces Python, los guiones se explican por sí mismos (con todas las # descripciones)Respuestas:
El libro de cocina PyQGIS explica qué archivos son comunes en los complementos QGIS. Como puede ver allí, solo necesitaría tres archivos para ejecutar un complemento mínimo:
__init__.py
metadata.txt
mainPlugin.py
El
__init__.py
archivo le permite a QGIS saber que la carpeta Plugin es un módulo de Python. Debe contener unaclassFactory(iface)
función que QGIS utiliza para inicializar su complemento, haciendo uso de su clase de complemento principal, que se encuentra en elmainPlugin.py
archivo.metadata.txt
es donde especifica los metadatos de su complemento, es decir, el nombre del complemento, el autor, la licencia, la versión, la página de inicio, el rastreador de errores, el repositorio, entre otros.mainPlugin.py
podría ser nombrado de otras maneras. Este es el archivo al que se hace referencia__init__.py
y contiene las funciones que enumeró en su pregunta. Yo diría que este archivo es el núcleo de su complemento.Con respecto al generador de complementos QGIS, le sugiero que lea la documentación oficial para tener una idea de cómo está estructurado. De hecho, prefiero no usar dicho complemento, porque crea muchas cosas que no te gustaría tener en cuenta mientras aprendes los conceptos básicos del desarrollo de complementos.
Te recomiendo que comiences desde complementos que entiendas completamente. Es decir, comience con una estructura de complemento muy básica (incluso la mínima) y agregue complejidad solo cuando sea necesario y cuando domine los conceptos básicos.
Por otro lado, te diré para qué son las funciones que enumeraste:
__init__( self, iface )
Este es el constructor de su complemento. Cuando QGIS reconoce una carpeta como un complemento de Python, el
__init__()
método se ejecuta y el objeto de interfaziface
, se pasa a su complemento, para que pueda acceder a QGIS después.Debe usar este método para guardar una referencia
iface
(ya que será su punto de entrada a los componentes de QGIS), así como para inicializar otras variables que usará en otras funciones de su complemento.tr( self, message )
Esta es una función de Python para obtener traducciones de cadenas. Por supuesto, deberá proporcionar traducciones, pero lo hace en otros archivos Qt (es decir, en archivos .ts).
En general, no necesitaría esta función a menos que admita otros idiomas además del inglés. Definitivamente no es una prioridad para los nuevos desarrolladores de PyQGIS.
add_action( self )
Esta es una función que solo he visto en complementos generados a través de QGIS Plugin Builder. Le ayuda a configurar su interfaz gráfica de usuario del complemento. Yo personalmente no lo uso en mis complementos.
initGui( self )
Este es un método para configurar la GUI de su complemento dentro de QGIS. Aquí puede especificar si desea un botón en la barra de herramientas del complemento QGIS, una barra de herramientas personalizada, un botón dentro de un menú QGIS existente y / o (no recomendado) un nuevo menú personalizado.
Este también es un buen lugar para establecer conexiones de SEÑAL / RANURA entre sus botones de complemento (u otros controles) y sus funciones.
unload( self )
Este es un método para eliminar sus widgets de complementos (botones, menús y similares) de la GUI de QGIS.
Este también es un buen lugar para desconectar SEÑALES y RANURAS en las que se ha conectado
initGui( self )
.run( self )
Este es el método principal de su complemento. Aquí coloca el código que se ejecutará cuando el usuario haga clic en el botón de su complemento. En general, comienza obteniendo algunos datos del proyecto actual de QGIS y luego editando, procesando o informando. Depende totalmente de usted.
Si su complemento tiene un diálogo, este es el método donde debe abrirlo, para que el usuario pueda comenzar a interactuar con el diálogo. La lógica del diálogo normalmente se maneja en otros archivos de Python, para distribuir su código y favorecer el mantenimiento y la encapsulación.
Tenga en cuenta que
run()
no es un buen lugar para establecer conexiones de SEÑAL / RANURA, porque al hacerlo, se establecerán cada vez que abra el cuadro de diálogo de su complemento, activando sus funciones (SLOT) varias veces como en Comportamiento extraño en un complemento QGIS: mi función es Se disparó dos veces .Finalmente, la mejor manera de aprender a programar complementos QGIS es leer el código fuente de otros complementos. Comience con los simples y cuando los domine, continúe con los más complejos.
He creado un complemento de demostración (muy simple) para ayudarlo a comprender cómo funcionan los complementos QGIS. Puedes acceder desde aquí . Hay instrucciones de instalación en el archivo README. El complemento le permite saber, a través de cuadros de mensaje, cuándo se ejecuta cada función que solicitó.
fuente
run()
Es una especie de convención. Por lo generalinitGui()
, establece una conexión entre un clic en el botón de su complemento y surun()
método, por lo que si desea darle otro nombre, también debe actualizar la ranura utilizada en esta conexión. Algo así comoself.action.triggered.connect(self.myCustomRun)
.