16.2. Extraits de code

Indication

Les extraits de code de cette page nécessitent les imports suivants si vous êtes en dehors de la console pyqgis :

 1from qgis.core import (
 2    QgsProject,
 3)
 4
 5from qgis.gui import (
 6    QgsOptionsWidgetFactory,
 7    QgsOptionsPageWidget
 8)
 9
10from qgis.PyQt.QtCore import Qt
11from qgis.PyQt.QtWidgets import QMessageBox, QAction, QHBoxLayout
12from qgis.PyQt.QtGui import QIcon

Cette section contient des extraits de code pour faciliter le développement de plugins.

16.2.1. Comment appeler une méthode par un raccourci clavier

Dans le plug-in, ajoutez à la fonction initGui().

self.key_action = QAction("Test Plugin", self.iface.mainWindow())
self.iface.registerMainWindowAction(self.key_action, "Ctrl+I")  # action triggered by Ctrl+I
self.iface.addPluginToMenu("&Test plugins", self.key_action)
self.key_action.triggered.connect(self.key_action_triggered)

À unload() ajouter

self.iface.unregisterMainWindowAction(self.key_action)

La méthode qui est appelée lorsque l’on appuie sur CTRL+I

def key_action_triggered(self):
  QMessageBox.information(self.iface.mainWindow(),"Ok", "You pressed Ctrl+I")

16.2.2. Interface pour le plugin dans le dialogue des options

Vous pouvez ajouter un onglet d’options de plugin personnalisé à Settings ► Options. Ceci est préférable à l’ajout d’une entrée spécifique dans le menu principal pour les options de votre plugin, car cela permet de garder tous les paramètres de l’application QGIS et les paramètres du plugin dans un seul endroit, ce qui est facile à découvrir et à naviguer pour les utilisateurs.

L’extrait suivant ajoute un nouvel onglet vierge pour les paramètres du plugin, prêt à être rempli avec toutes les options et paramètres spécifiques à votre plugin. Vous pouvez diviser les classes suivantes en différents fichiers. Dans cet exemple, nous ajoutons deux classes dans le fichier main mainPlugin.py.

 1class MyPluginOptionsFactory(QgsOptionsWidgetFactory):
 2
 3    def __init__(self):
 4        super().__init__()
 5
 6    def icon(self):
 7        return QIcon('icons/my_plugin_icon.svg')
 8
 9    def createWidget(self, parent):
10        return ConfigOptionsPage(parent)
11
12
13class ConfigOptionsPage(QgsOptionsPageWidget):
14
15    def __init__(self, parent):
16        super().__init__(parent)
17        layout = QHBoxLayout()
18        layout.setContentsMargins(0, 0, 0, 0)
19        self.setLayout(layout)

Enfin, nous ajoutons les importations et modifions la fonction __init_ :

 1from qgis.PyQt.QtWidgets import QHBoxLayout
 2from qgis.gui import QgsOptionsWidgetFactory, QgsOptionsPageWidget
 3
 4
 5class MyPlugin:
 6    """QGIS Plugin Implementation."""
 7
 8    def __init__(self, iface):
 9        """Constructor.
10
11        :param iface: An interface instance that will be passed to this class
12            which provides the hook by which you can manipulate the QGIS
13            application at run time.
14        :type iface: QgsInterface
15        """
16        # Save reference to the QGIS interface
17        self.iface = iface
18
19
20    def initGui(self):
21        self.options_factory = MyPluginOptionsFactory()
22        self.options_factory.setTitle(self.tr('My Plugin'))
23        iface.registerOptionsWidgetFactory(self.options_factory)
24
25    def unload(self):
26        iface.unregisterOptionsWidgetFactory(self.options_factory)

Astuce

Ajouter des onglets personnalisés à la boîte de dialogue des propriétés d’une couche vecteur.

Vous pouvez appliquer une logique similaire pour ajouter l’option personnalisée du plugin au dialogue des propriétés de la couche en utilisant les classes QgsMapLayerConfigWidgetFactory et QgsMapLayerConfigWidget.