Frammenti di codice

Questa sezione contiene frammenti di codice per facilitare lo sviluppo dei plugin.

Come invocare un metodo tramite scorciatoia da tastiera

Nel plug-in aggiungere a 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)

Aggiungere a unload()

self.iface.unregisterMainWindowAction(self.keyAction)

Il metodo che viene invocato quando si preme F7

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

Come impostare/rimuovere i layers

A partire da QGIS 2.4 é disponibile una nuova API dell’albero dei layer che consente un accesso diretto all’albero dei layer direttamente dalla legenda. Questo é un esempio di come attivare/rimuovere la visibilitá del layer attivo.

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)

Come accedere alla tabella degli attributi di una caratteristica selezionata

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")

Il metodo richiede un parametro (il nuovo valore per il campo attributo delle caratteristiche selezionate()) e puó essere invocato da

self.changeValue(50)