Fragmentos de código

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

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

En el complemento añadir a la initGui()

self.keyAction = QAction("Test Plugin", self.iface.mainWindow())
self.iface.registerMainWindowAction(self.keyAction, "F7") # action1 triggered by F7 key
self.iface.addPluginToMenu("&Test plugins", self.keyAction)
QObject.connect(self.keyAction, SIGNAL("triggered()"),self.keyActionF7)

Para añadir unload()

self.iface.unregisterMainWindowAction(self.keyAction)

El método que se llama cuando se presiona F7

def keyActionF7(self):
  QMessageBox.information(self.iface.mainWindow(),"Ok", "You pressed F7")

Como alternar capas

Desde QGIS 2.4 hay un nuevo API de árbol de capas que permite acceder directamente al árbol de capas en la leyenda. Aquí un ejemplo de cómo alternar 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.setVisible(new_state)

Cómo acceder a la tabla de atributos de los objetos espaciales seleccionados

def changeValue(self, value):
  layer = self.iface.activeLayer()
  if(layer):
    nF = layer.selectedFeatureCount()
    if (nF > 0):
      layer.startEditing()
    ob = layer.selectedFeaturesIds()
    b = QVariant(value)
    if (nF > 1):
      for i in ob:
      layer.changeAttributeValue(int(i), 1, b) # 1 being the second column
    else:
      layer.changeAttributeValue(int(ob[0]), 1, b) # 1 being the second column
    layer.commitChanges()
    else:
      QMessageBox.critical(self.iface.mainWindow(), "Error", "Please select at least one feature from current layer")
  else:
    QMessageBox.critical(self.iface.mainWindow(), "Error", "Please select a layer")

El método requiere un parámetro (el nuevo valor para el campo de atributo de los objeto(s) espaciales seleccionados) y puede ser llamado por

self.changeValue(50)