Définition d'une valeur par défaut dans un champ QGIS

12

Je voudrais ajouter dans le champ d'un calque une valeur par défaut. Je veux dire, chaque fois qu'une nouvelle fonctionnalité est créée, ce champ serait automatiquement rempli avec la valeur par défaut.

Dans mon cas, la valeur par défaut serait la variable @project_filename (nom de fichier du projet).

Je ne trouve cette fonctionnalité nulle part.

Cordialement,

Egidi
la source

Réponses:

8

Depuis QGIS 2.18, accédez aux propriétés de la couche / propriétés du champ et définissez une expression ( @project_filenamedans ce cas) comme valeur par défaut.

Valeurs par défaut basées sur l'expression

https://www.qgis.org/en/site/forusers/visualchangelog218/index.html#feature-client-side-default-field-values

Matthias Kuhn
la source
1
Dans l'API C ++, si je ne me trompe pas, il existe une classe QgsDefaultValue pour le faire par programme. Existe-t-il une alternative python à cela?
shika-kun
Si vous posez cette question comme une nouvelle question, je serai heureux d'y répondre. Envoyez-moi un rappel ici;)
Matthias Kuhn
10

Vous pouvez définir une fonction qui ajoute le nom de fichier du projet en tant qu'attribut et connecter cette fonction à l'événement qui ajoute des fonctionnalités. Vous pouvez utiliser le code suivant, changer le nom du champ en celui que vous choisissez (j'ai utilisé Name) et le coller dans la console Python . Maintenant, chaque fois que vous ajoutez une nouvelle fonctionnalité, le champ sera rempli avec le nom du projet actuel:

import os

# Get project name
project = QgsProject.instance()
project_name = os.path.basename(project.fileName())

# Set active layer
layer = qgis.utils.iface.activeLayer()

# Define function to select added feature and add attribute to field "Name"
def update(featureAdded):
    idx = layer.fieldNameIndex('Name')
    layer.changeAttributeValue(featureAdded, idx, project_name)

# Connect "featureAdded" event to "select" function
layer.featureAdded.connect(update)

Résultat

Joseph
la source
1
Avez-vous besoin d'exécuter le script à chaque fois que vous modifiez la couche ou le script reste stocké dans le projet qgis?
Vale
1
@Vale - Vous pouvez enregistrer le script en tant que macro qui sera stockée dans le projet QGIS. Je vais modifier le message pour l'inclure =)
Joseph
1
Pourquoi avez-vous besoin de sélectionner des fonctionnalités Joseph?
Germán Carrillo
3
Je ne pense pas qu'il soit nécessaire de poser une autre question, car il y aurait trop de chevauchements. Vous êtes vraiment proche. Je vous suggère d'éviter de sélectionner des fonctionnalités. Ce que vous obtenez en tant que paramètre lorsque le signal featureAddedest déclenché, est en fait un identifiant de fonctionnalité. Et c'est tout ce dont vous avez besoin pour appeler changeAttributeValue. Dans la updatefonction, vous auriez juste besoin de 2 lignes (en utilisant vos noms de variables): idx = layer.fieldNameIndex('Name')et layer.changeAttributeValue(featureAdded, idx, project_name).
Germán Carrillo
1
@ GermánCarrillo - Cela a fonctionné, wow si simple! Merci pour votre super copain de suggestions! J'apprends quelque chose tous les jours =)
Joseph