Codesnippers

Dit gedeelte behandelt codesnippers om de ontwikkeling van plug-ins te faciliteren.

Hoe een methode aan te roepen met een sneltoets

Voeg in de plug-in aan de initGui() toe

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)

Voeg aan unload() toe

self.iface.unregisterMainWindowAction(self.key_action)

De methode die wordt aangeroepen wanneer op CTRL+I wordt gedrukt

def key_action_triggered(self):
  QMessageBox.information(self.iface.mainWindow(),"Ok", "You pressed Ctrl+I")

Hoe te schakelen tussen lagen

Er is een API om toegang te verkrijgen tot lagen in de legenda. Hier is een voorbeeld dat schakelt met de zichtbaarheid van de actieve laag

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)

Hoe toegang te krijgen tot de attributentabel van geselecteerde objecten

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

De methode vereist één parameter (de nieuwe waarde voor het tweede veld van het/de geselecteerde object(en)) en kan worden aangeroepen met

changeValue(50)