Extraits de code

Cette section présente des extraits de code pour faciliter le développement d’extensions.

Comment appeler une méthode à l’aide d’un raccourci clavier

Ajoutez ce qui suit à la méthode initGui() de l’extension:

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)

Pour décharger l’extension, ajoutez ce qui suit à la méthode unload() de l’extension:

self.iface.unregisterMainWindowAction(self.keyAction)

La méthode est appelée lors d’un appui sur F7:

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

Comment activer des couches:

Depuis QGIS 2.4, il existe une nouvelle API d’arbre de couches qui permet un accès direct à l’arbre des couches de la légende. Voici un exemple qui présente une méthode pour activer la visibilité d’une couche active:

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)

Comment accéder à la table attributaire des entités sélectionnées

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

La méthode utilise un paramètre (la nouvelle valeur du champ d’attribut de l’entité sélectionnée) et elle peut être appelée de la manière suivante:

self.changeValue(50)