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