16.2. Blocchi di codice

Suggerimento

I frammenti di codice di questa pagina necessitano delle seguenti importazioni se sei è al di fuori della 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

Questa sezione contiene frammenti di codice per facilitare lo sviluppo dei plugin.

16.2.1. Come richiamare un metodo con una scorciatoia da tastiera

Nel plug-in aggiungere a 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)

A unload() aggiungere

self.iface.unregisterMainWindowAction(self.key_action)

Il metodo che viene richiamato quando si preme CTRL+I

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

16.2.2. Interfaccia per il plugin nella finestra di dialogo delle opzioni

Puoi aggiungere una scheda per le opzioni del plugin a Impostazioni ► Opzioni. Questa soluzione è preferibile all’aggiunta di una voce specifica del menu principale per le opzioni del plugin, in quanto consente di mantenere tutte le impostazioni dell’applicazione QGIS e del plugin in un unico punto, facile da scoprire e da navigare per gli utenti.

Il seguente frammento di codice aggiungerà una nuova scheda vuota per le impostazioni del plugin, pronta per essere popolata con tutte le opzioni e le impostazioni specifiche del plugin. Puoi dividere le classi seguenti in file diversi. In questo esempio, aggiungiamo due classi al file principale 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)

Infine, aggiungiamo le importazioni e modifichiamo la funzione __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)

Suggerimento

Aggiungere schede personalizzate alla finestra di dialogo delle proprietà di un layer vettoriale

Puoi adottare una logica simile per aggiungere l’opzione personalizzata del plugin alla finestra di dialogo delle proprietà del layer, usando le classi QgsMapLayerConfigWidgetFactory e QgsMapLayerConfigWidget.