Impostazione di un valore predefinito in un campo QGIS


12

Vorrei aggiungere nel campo di un livello un valore predefinito. Voglio dire, ogni volta che viene creata una nuova funzionalità, quel campo verrebbe riempito automaticamente con il valore predefinito.

Nel mio caso il valore predefinito sarebbe la variabile @project_filename (nome file del progetto).

Non riesco a trovare questa funzionalità da nessuna parte.

Saluti,

Risposte:


8

Da QGIS 2.18, vai alle proprietà del layer / proprietà del campo e imposta un'espressione ( @project_filenamein questo caso) come valore predefinito.

Valori predefiniti basati su espressioni

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


1
Nell'API C ++ se non sbaglio c'è la classe QgsDefaultValue per farlo programmaticamente. Esiste un'alternativa a Python?
shika-kun,

Se lo fai come una nuova domanda, sarò felice di risponderti. Mandami un promemoria qui;)
Matthias Kuhn,


10

È possibile definire una funzione che aggiunge il nome file del progetto come attributo e connettere questa funzione con l'evento che aggiunge funzionalità. Puoi usare il seguente codice, cambiare il nome del campo in qualunque cosa tu scelga (ho usato Name) e incollarlo nella Console Python . Ora ogni volta che aggiungi una nuova funzionalità, il campo verrà popolato con il nome del progetto corrente:

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)

Risultato


1
Devi eseguire lo script ogni volta che modifichi il layer o lo script rimane memorizzato nel progetto qgis?
Vale

1
@Vale: è possibile salvare lo script come macro che verrà memorizzata nel progetto QGIS. Modificherò il post per includere questo =)
Joseph

1
Perché è necessario selezionare le funzionalità Joseph?
Germán Carrillo,

3
Non penso che sia necessario pubblicare un'altra domanda, in quanto vi sarebbero troppe sovrapposizioni. Sei davvero vicino. Ti suggerirei di evitare di selezionare le funzionalità. Ciò che si ottiene come parametro quando featureAddedviene attivato il SEGNALE , è in realtà un ID funzione. E questo è tutto ciò che serve per chiamare changeAttributeValue. Nella updatefunzione occorrerebbero solo 2 righe (usando i nomi delle variabili): idx = layer.fieldNameIndex('Name')e layer.changeAttributeValue(featureAdded, idx, project_name).
Germán Carrillo,

1
@ GermánCarrillo - Ha funzionato, wow così semplice! Grazie per il tuo fantastico amico! Imparo qualcosa ogni giorno =)
Joseph
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.