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