16.2. Fragmentos de código
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. Como alternar capas
Hay una API para acceder a las capas en la leyenda. Aquí hay un ejemplo que alterna la visibilidad de la capa activa
root = QgsProject.instance().layerTreeRoot()
node = root.findLayer(iface.activeLayer().id())
new_state = Qt.Checked if node.isVisible() == Qt.Unchecked else Qt.Unchecked
node.setItemVisibilityChecked(new_state)
16.2.3. Cómo acceder a la tabla de atributos de los objetos espaciales seleccionados
1def change_value(value):
2 """Change the value in the second column for all selected features.
3
4 :param value: The new value.
5 """
6 layer = iface.activeLayer()
7 if layer:
8 count_selected = layer.selectedFeatureCount()
9 if count_selected > 0:
10 layer.startEditing()
11 id_features = layer.selectedFeatureIds()
12 for i in id_features:
13 layer.changeAttributeValue(i, 1, value) # 1 being the second column
14 layer.commitChanges()
15 else:
16 iface.messageBar().pushCritical("Error",
17 "Please select at least one feature from current layer")
18 else:
19 iface.messageBar().pushCritical("Error", "Please select a layer")
20
21# The method requires one parameter (the new value for the second
22# field of the selected feature(s)) and can be called by
23change_value(50)
16.2.4. 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
.