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¶
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | def change_value(value):
"""Change the value in the second column for all selected features.
:param value: The new value.
"""
layer = iface.activeLayer()
if layer:
count_selected = layer.selectedFeatureCount()
if count_selected > 0:
layer.startEditing()
id_features = layer.selectedFeatureIds()
for i in id_features:
layer.changeAttributeValue(i, 1, value) # 1 being the second column
layer.commitChanges()
else:
iface.messageBar().pushCritical("Error",
"Please select at least one feature from current layer")
else:
iface.messageBar().pushCritical("Error", "Please select a layer")
# The method requires one parameter (the new value for the second
# field of the selected feature(s)) and can be called by
change_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
.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | class MyPluginOptionsFactory(QgsOptionsWidgetFactory):
def __init__(self):
super().__init__()
def icon(self):
return QIcon('icons/my_plugin_icon.svg')
def createWidget(self, parent):
return ConfigOptionsPage(parent)
class ConfigOptionsPage(QgsOptionsPageWidget):
def __init__(self, parent):
super().__init__(parent)
layout = QHBoxLayout()
layout.setContentsMargins(0, 0, 0, 0)
self.setLayout(layout)
|
Finalmente estamos agregando las importaciones y modificando la función __init__
:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | from qgis.PyQt.QtWidgets import QHBoxLayout
from qgis.gui import QgsOptionsWidgetFactory, QgsOptionsPageWidget
class MyPlugin:
"""QGIS Plugin Implementation."""
def __init__(self, iface):
"""Constructor.
:param iface: An interface instance that will be passed to this class
which provides the hook by which you can manipulate the QGIS
application at run time.
:type iface: QgsInterface
"""
# Save reference to the QGIS interface
self.iface = iface
def initGui(self):
self.options_factory = MyPluginOptionsFactory()
self.options_factory.setTitle(self.tr('My Plugin'))
iface.registerOptionsWidgetFactory(self.options_factory)
def unload(self):
iface.unregisterOptionsWidgetFactory(self.options_factory)
|
Truco
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
.