Quel est le but de certaines fonctions et fichiers dans les plugins QGIS Python?

8

J'essaie simplement de comprendre l'architecture d'un plug-in QGIS créé avec QGIS Plugin Builder, ainsi que le flux de travail et la liaison entre les fichiers générés. Si possible, je préfère un diagramme.

Il serait également utile de savoir ce que font les fonctions suivantes dans le code Python. Je suis nouveau dans la création du plugin QGIS.

  1. __init__( self, iface )
  2. tr( self, message )
  3. add_action( self )
  4. initGui( self )
  5. unload( self )
  6. run( self )
User123
la source
Il y a des informations dans le lien suivant: docs.qgis.org/testing/en/docs/pyqgis_developer_cookbook/… . Malheureusement, je ne pense pas qu'il existe un «guide pour les nuls» dans le développement de plugins QGIS (comme je pourrais certainement le faire avec un!).
Joseph
Désolé de dire que l'URL ci-dessus est introuvable sur le serveur.
User123
C'est une pure question Python de création de classes (générales et avec PyQt4 ). La seule question de PyQGIS ici est de savoir ce qu'est iface(l'interface QGIS). Il me semble que si vous connaissez Python, les scripts sont explicites (avec toutes les # descriptions)
gène
Très bien, je me demande simplement comment chaque fonction reflètera les qgis. Supposons, par exemple, que les modifications du code de fonction se reflètent dans notre plugin.
User123
Étrange, l'url fonctionnait avant ... essayez ceci: docs.qgis.org/testing/en/docs/pyqgis_developer_cookbook/…
Joseph

Réponses:

16

Le livre de recettes PyQGIS explique quels fichiers sont courants dans les plugins QGIS. Comme vous pouvez le voir, vous n'auriez besoin que de trois fichiers pour exécuter un plugin minimal:

  • __init__.py
  • metadata.txt
  • mainPlugin.py

Le __init__.pyfichier indique à QGIS que le dossier Plugin est un module Python. Il doit contenir une classFactory(iface)fonction que QGIS utilise pour initialiser votre plugin, en utilisant votre classe Plugin principale, qui se trouve dans le mainPlugin.pyfichier.

metadata.txt est l'endroit où vous spécifiez les métadonnées de votre plugin, c'est-à-dire le nom du plugin, l'auteur, la licence, la version, la page d'accueil, le bugtracker, le référentiel, entre autres.

mainPlugin.pypourrait être nommé d'une autre manière. Il s'agit du fichier référencé __init__.pyet contient les fonctions que vous avez énumérées dans votre question. Je dirais que ce fichier est le cœur de votre plugin.


En ce qui concerne QGIS Plugin Builder, je vous suggère de lire la documentation officielle pour avoir une idée de sa structure. En fait, je préfère ne pas utiliser un tel plugin, car cela crée beaucoup de choses que vous n'aimeriez pas savoir pendant que vous apprenez les bases du développement de plugins.

Je vous recommande de partir de plugins que vous comprenez parfaitement. Autrement dit, commencez avec une structure de plugin très basique (même minimale) et ajoutez de la complexité uniquement lorsque cela est nécessaire et lorsque vous maîtrisez les bases.

D'un autre côté, je vais vous dire à quoi servent les fonctions que vous avez énumérées:

  1. __init__( self, iface )

    C'est le constructeur de votre plugin. Lorsque QGIS reconnaît un dossier en tant que plug-in Python, la __init__()méthode est exécutée et l'objet d'interface iface, est transmis à votre plug-in, afin qu'il puisse accéder à QGIS par la suite.

    Vous devez utiliser cette méthode pour enregistrer une référence à iface(car ce sera votre point d'entrée vers les composants QGIS) ainsi que pour initialiser d'autres variables que vous utiliserez dans d'autres fonctions de votre plugin.

  2. tr( self, message )

    Il s'agit d'une fonction Python pour obtenir des traductions à partir de chaînes. Bien sûr, vous devrez fournir des traductions, mais vous le faites dans d'autres fichiers Qt (à savoir, dans les fichiers .ts).

    En général, vous n'auriez pas besoin de cette fonction à moins de prendre en charge des langues autres que l'anglais. Ce n'est certainement pas une priorité pour les nouveaux développeurs PyQGIS.

  3. add_action( self )

    C'est une fonction que je n'ai vue que dans les plugins générés via QGIS Plugin Builder. Il vous aide à configurer l'interface graphique de votre plugin. Personnellement, je ne l'utilise pas dans mes plugins.

  4. initGui( self )

    Il s'agit d'une méthode pour configurer l'interface graphique de votre plugin dans QGIS. Ici, vous spécifiez si vous voulez un bouton dans la barre d'outils du plug-in QGIS, une barre d'outils personnalisée, un bouton à l'intérieur d'un menu QGIS existant et / ou (non recommandé) un nouveau menu personnalisé.

    C'est également un bon endroit pour établir des connexions SIGNAL / SLOT entre vos boutons de plugin (ou d'autres commandes) et vos fonctions.

  5. unload( self )

    Il s'agit d'une méthode pour supprimer vos widgets de plugin (boutons, menus, etc.) de l'interface graphique QGIS.

    C'est également un bon endroit pour déconnecter les SIGNAUX et les FENTES auxquels vous vous êtes connecté initGui( self ).

  6. run( self )

    C'est la principale méthode de votre plugin. Ici, vous mettez le code qui s'exécutera lorsque l'utilisateur cliquera sur le bouton de votre plugin. Dans l'ensemble, vous commencez par obtenir des données du projet QGIS en cours, puis effectuez des modifications, des traitements ou des rapports. Cela dépend entièrement de vous.

    Si votre plugin a une boîte de dialogue, c'est la méthode où vous devez l'ouvrir, afin que l'utilisateur puisse commencer à interagir avec la boîte de dialogue. La logique de dialogue est normalement gérée dans d'autres fichiers Python, afin de distribuer votre code et favoriser la maintenance et l'encapsulation.

    Notez que ce run()n'est pas un bon endroit pour définir des connexions SIGNAL / SLOT, car ce faisant, elles seront définies à chaque fois que vous ouvrez la boîte de dialogue de votre plugin, déclenchant vos fonctions (SLOT) plusieurs fois comme dans le comportement Odd d'un plugin QGIS: ma fonction est déclenché deux fois .


Enfin, la meilleure façon d'apprendre à programmer des plugins QGIS est de lire le code source des autres plugins. Commencez par des plus simples et lorsque vous les maîtrisez, passez à des plus complexes.

J'ai créé un plugin de démonstration (très simple) pour vous aider à comprendre comment fonctionnent les plugins QGIS. Vous pouvez y accéder à partir d'ici . Il y a des instructions d'installation dans le fichier README. Le plugin vous permet de savoir, à travers des boîtes de message, quand chaque fonction que vous avez demandée est exécutée.

Germán Carrillo
la source
1
Merci gcarrillo pour votre explication claire, je suis sûr que cela me sera extrêmement utile en tant que débutant.
User123
1
Question sur la méthode d' exécution . Je l'ai également vu nommé onRun . Puis-je supposer que la dénomination n'a pas d'importance, mais qu'elle contient généralement le mot par habitude?
BritishSteel
2
À droite @BritishSteel, vous pouvez nommer la méthode que vous voulez. run()est une sorte de convention. Habituellement, initGui()vous définissez une connexion entre un clic sur votre bouton de plug-in et votre run()méthode, donc si vous voulez lui donner un autre nom, vous devez également mettre à jour l'emplacement utilisé dans cette connexion. Quelque chose comme self.action.triggered.connect(self.myCustomRun).
Germán Carrillo
1
C'est tout simplement génial, je trouverai aussi cela incroyablement utile!
Joseph
@gcarrillo: au 3ème point, vous aviez mentionné "C'est la fonction, vue dans les plugins générés via le plugin builder". Je suis simplement curieux de savoir quelles sont les autres façons de développer des plugins autres que le générateur de plugins.
User123