Встановлення значення за замовчуванням у полі 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
У API C ++, якщо я не помиляюся, є клас QgsDefaultValue, щоб це робити програмно. Чи існує альтернатива цьому пітону?
шика-кун

Якщо ви поставите це як нове запитання, я з радістю відповім на нього. Просто надішліть мені нагадування сюди;)
Маттіас Кун


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?
Вале

1
@ Vale - сценарій можна зберегти як макрос, який буде зберігатися в рамках проекту QGIS. Я відредагую публікацію, щоб включити це =)
Йосип

1
Чому потрібно вибрати функції Джозефа?
Герман Каррілло

3
Я не думаю, що не потрібно ставити ще одне запитання, оскільки було б занадто багато перекриттів. Ви насправді близькі. Я б запропонував вам уникати вибору функцій. Те, що ви отримуєте як параметр при featureAddedспрацьовуванні SIGNAL , насправді ідентифікатор функції. І це все, що потрібно для дзвінка changeAttributeValue. У updateфункцію вам просто знадобляться 2 рядки (використовуючи ваші назви змінних): idx = layer.fieldNameIndex('Name')і layer.changeAttributeValue(featureAdded, idx, project_name).
Герман Каррільо

1
@ GermánCarrillo - Це спрацювало, ух так просто! Дякую за чудову пропозицію, приятель! Я дізнаюся щось щоденне =)
Йосип
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.