¿Cuál es el propósito de algunas funciones y archivos en los complementos de QGIS Python?


8

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.

  1. __init__( self, iface )
  2. tr( self, message )
  3. add_action( self )
  4. initGui( self )
  5. unload( self )
  6. run( self )

Hay alguna información en el siguiente enlace: docs.qgis.org/testing/en/docs/pyqgis_developer_cookbook/… . Desafortunadamente, no creo que haya una 'Guía de Dummies' en el desarrollo de complementos QGIS (¡como podría hacer con uno!).
Joseph

lamento decir que la url anterior no se encontró en el servidor.
Usuario123

Es una cuestión pura de Python de creación de clases (general y con PyQt4 ). La única pregunta de PyQGIS aquí es qué es iface(la interfaz QGIS). Me parece que si conoces Python, los guiones se explican por sí mismos (con todas las # descripciones)
gen

Bien. Me pregunto cómo cada función reflejará los qgis. Digamos, por ejemplo, que los cambios en el código de la función de ejecución se reflejarán en nuestro complemento.
Usuario123

Extraño, la url estaba funcionando antes ... intente esto: docs.qgis.org/testing/en/docs/pyqgis_developer_cookbook/…
Joseph

Respuestas:


16

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__.pyarchivo le permite a QGIS saber que la carpeta Plugin es un módulo de Python. Debe contener una classFactory(iface)función que QGIS utiliza para inicializar su complemento, haciendo uso de su clase de complemento principal, que se encuentra en el mainPlugin.pyarchivo.

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.pypodría ser nombrado de otras maneras. Este es el archivo al que se hace referencia __init__.pyy 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:

  1. __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 interfaz iface, 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.

  2. 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.

  3. 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.

  4. 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.

  5. 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 ).

  6. 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ó.


1
Gracias gcarrillo por tu clara explicación. Estoy seguro de que será muy útil para mí como principiante.
Usuario123

1
Pregunta sobre el método de ejecución . También lo he visto llamado onRun . ¿Puedo suponer que la denominación no importa, pero generalmente contiene la palabra quedarse sin hábito?
BritishSteel

2
Correcto @BritishSteel, puede nombrar el método que desee. run()Es una especie de convención. Por lo general initGui(), establece una conexión entre un clic en el botón de su complemento y su run()método, por lo que si desea darle otro nombre, también debe actualizar la ranura utilizada en esta conexión. Algo así como self.action.triggered.connect(self.myCustomRun).
Germán Carrillo

1
Esto es genial, ¡también lo encontraré increíblemente útil!
Joseph

@gcarrillo: en el 3er punto, habías mencionado "Esta es la función, vista en complementos generados a través del generador de complementos". Tengo curiosidad por saber cuáles son las otras formas de desarrollar complementos que no sean el generador de complementos.
Usuario123
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.