16.2. Fragmentos de código

Consejo

Los fragmentos de código en esta página necesitan las siguientes adiciones si está fuera de la consola de 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

Esta sección cuenta con fragmentos de código para facilitar el desarrollo de complementos.

16.2.1. Cómo llamar a un método por un atajo de teclado

En el complemento añadir a la 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)

Para añadir unload()

self.iface.unregisterMainWindowAction(self.key_action)

El método que se llama cuando se presiona CTRL+I

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

16.2.2. Interfaz para complemento en el cuadro de diálogo de opciones

Puede agregar una pestaña de opciones de complementos personalizados a Configuración -> Opciones. Esto es preferible a agregar una entrada de menú principal específica para las opciones de su complemento, ya que mantiene todas las configuraciones de la aplicación QGIS y las configuraciones del complemento en un solo lugar que es fácil de descubrir y navegar por los usuarios.

El siguiente fragmento solo agregará una nueva pestaña en blanco para la configuración del complemento, lista para que la complete con todas las opciones y configuraciones específicas de su complemento. Puede dividir las siguientes clases en diferentes archivos. En este ejemplo, estamos agregando dos clases al archivo principal 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)

Finalmente estamos agregando las importaciones y modificando la función __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)

Truco

Añade pestañas personalizadas a un cuadro de diálogo de propiedades de capa vectorial

Puede aplicar una lógica similar para agregar la opción personalizada del complemento al cuadro de diálogo de propiedades de la capa usando las clases QgsMapLayerConfigWidgetFactory y QgsMapLayerConfigWidget.