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.
__init__( self, iface )
tr( self, message )
add_action( self )
initGui( self )
unload( self )
run( self )
qgis
python
qgis-plugins
pyqgis
User123
la source
la source
iface
(l'interface QGIS). Il me semble que si vous connaissez Python, les scripts sont explicites (avec toutes les # descriptions)Réponses:
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__.py
fichier indique à QGIS que le dossier Plugin est un module Python. Il doit contenir uneclassFactory(iface)
fonction que QGIS utilise pour initialiser votre plugin, en utilisant votre classe Plugin principale, qui se trouve dans lemainPlugin.py
fichier.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.py
pourrait être nommé d'une autre manière. Il s'agit du fichier référencé__init__.py
et 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:
__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'interfaceiface
, 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.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.
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.
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.
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 )
.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.
la source
run()
est une sorte de convention. Habituellement,initGui()
vous définissez une connexion entre un clic sur votre bouton de plug-in et votrerun()
méthode, donc si vous voulez lui donner un autre nom, vous devez également mettre à jour l'emplacement utilisé dans cette connexion. Quelque chose commeself.action.triggered.connect(self.myCustomRun)
.