Установка значения по умолчанию в поле QGIS


12

Я хотел бы добавить в поле слоя значение по умолчанию. Я имею в виду, что каждый раз, когда создается новая функция, это поле будет автоматически заполняться значением по умолчанию.

В моем случае значением по умолчанию будет переменная @project_filename (имя файла проекта).

Я не могу найти эту функцию нигде.

С Уважением,

Ответы:


8

Начиная с QGIS 2.18, перейдите к свойствам слоя / свойствам поля и установите выражение ( @project_filenameв данном случае) в качестве значения по умолчанию.

Значения по умолчанию на основе выражений

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


1
В C ++ API, если я не ошибаюсь, есть класс QgsDefaultValue, чтобы сделать это программно. Есть ли альтернатива Python этому?
Шика-кун

Если вы зададите это как новый вопрос, я буду рад ответить на него. Просто пришлите мне напоминание здесь;)
Матиас Кун


10

Вы можете определить функцию, которая добавляет имя файла проекта в качестве атрибута, и связать эту функцию с событием, которое добавляет функции. Вы можете использовать следующий код, изменить имя поля на любое другое (я использовал Name) и вставить его в консоль Python . Теперь, когда вы добавляете новую функцию, поле будет заполнено именем текущего проекта:

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)

Результат


1
Вам нужно запускать скрипт каждый раз, когда вы редактируете слой, или скрипт остается в проекте qgis?
Vale

1
@Vale - Вы можете сохранить скрипт как макрос, который будет храниться в проекте QGIS. Я буду редактировать пост, чтобы включить это =)
Джозеф

1
Зачем вам нужно выбирать функции Джозефа?
Герман Каррильо

3
Я не думаю, что нужно публиковать еще один вопрос, так как было бы слишком много совпадений. Вы на самом деле близко. Я бы посоветовал вам избегать выбора функций. То, что вы получаете в качестве параметра при featureAddedсрабатывании СИГНАЛА , на самом деле является идентификатором функции. И это все, что вам нужно для звонка changeAttributeValue. В updateфункцию вам понадобятся всего две строки (используя имена переменных): idx = layer.fieldNameIndex('Name')и layer.changeAttributeValue(featureAdded, idx, project_name).
Герман Каррильо

1
@ GermánCarrillo - Это сработало, ничего себе! Спасибо за приятное предложение, приятель! Я учусь чему-то каждый день =)
Джозеф
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.