5.3. Занятие: Формы
При добавлении новых данных с помощью оцифровки появляется диалоговое окно, позволяющее заполнить атрибуты для этой функции. Однако этот диалоговое окно по умолчанию выглядит не очень приятно. Это может вызвать проблему для удобства использования, особенно если вам надо создать большие наборы данных или если вы хотите, чтобы другие люди помогали вам оцифровывать, а они считают, что формы по умолчанию запутаны.
К счастью, QGIS позволяет создавать собственные диалоговые окна для слоя. На этом занятии показывается как это сделать.
Цель этого занятия: создать форму для слоя.
5.3.1. Идем дальше: Используем Функциональность дизайна Формы QGIS
Выберите слой
roads
на панели Layers.Переходите в режим редактирования, как и ранее.
Откройте таблицы атрибутов слоя
roads
дорог.Кликните правой кнопкой мыши любую ячейку в таблице. Появится короткое меню, включающее Open form.
Кликните его, чтобы увидеть форму, которую QGIS создает для этого уровня.
Очевидно, что было бы неплохо делать это, глядя на карту, вместо того, чтобы постоянно искать конкретную улицу в таблице атрибутов Attribute Table.
Выберите слой roads на панели Layers.
С помощью инструмента Идентификация функций Identify Features кликните любую улицу на карте.
Панель Identify Results откроется, на которой отображается «дерево» значений полей и другая общая информация о выбранной функции.
At the top of the panel, check the Auto open form for single feature results checkbox in the Identify Settings menu.
Теперь кликните еще раз на любой улице на карте. В предыдущем диалоговом окне Identify Results отображается знакомая форма:
Каждый раз когда вы кликаете по одной функции с помощью инструмента Идентифицировать его форма появляется при условии, что установлен флажок Автоматически открывать форму Auto open form.
5.3.2. Попробуйте сами, используйте формы для редактирования значений
Если вы находитесь в режиме редактирования, эту форму можно использовать для редактирования атрибутов функции.
Активировать режим редактирования (если он еще не активирован).
С помощью инструмента Определить функции Identify Features кликните главную улицу, проходящую через Swellendam Swellendam:
Редактируйте его значение highway как
secondary
.Выходите из режима редактирования и сохраняйте изменения.
Откройте таблицу атрибутов Attribute Table и отметьте что значение было обновлено в таблице атрибутов и, следовательно, в исходных данных.
5.3.3. Идем дальше: Настройка типов полей формы
Приятно редактировать вещи с помощью формы, но все равно надо вводить все вручную. К счастью, формы имеют различные виды так называемых виджетов, которые позволяют редактировать данные различными способами.
Откройте roads слоя Properties…
Переедите на вкладку Fields. Вы увидите это:
Перейдите на вкладку Attributes Form. Вы увидите это:
Кликните на ряд
oneway
и выберите Checkbox как Widget Type в списке вариантов:Кликните OK
Переход в режим редактирования (если слой
roads
не находится уже в режим редактирования)Кликните на ту же главную дорогу, которую вы выбрали ранее.
Теперь вы увидите, что oneway однонаправленный атрибут имеет флажок рядом с ним, обозначающий True
(флажок) или False
(нет флажка).
5.3.4. Попробуйте сами
Задайте более подходящий виджет формы для поля highway.
Answer
For the TYPE, there is obviously a limited amount of types that a road can be, and if you check the attribute table for this layer, you’ll see that they are predefined.
Set the widget to Value Map and click Load Data from Layer.
Select roads in the Label dropdown and highway for both the Value and Description options:
Click OK three times.
If you use the Identify tool on a street now while edit mode is active, the dialog you get should look like this:
5.3.5. Попробуйте сами, создайте тестовые данные
Также можно полностью создать собственную пользовательскую форму.
Создайте простой слой точек с именем
test-data
с двумя атрибутами:название (текст)
возраст (целое число)
Зафиксируйте несколько точек на новом слое с помощью инструментов оцифровки, чтобы у вас было немного данных для воспроизведения. При каждой записисъемке новой точки вам должна быть представлена форма записи атрибутов, сгенерированных QGIS по умолчанию.
Примечание
Может потребоваться отключить привязку, если она все еще включена для предыдущих задач.
5.3.6. Идем дальше: Создание новой формы
Теперь мы хотим создать собственную пользовательскую форму для фазы сбора данных атрибутов. Для этого необходимо установить Дизайнер QT (только для лица, создающего формы).
Запустить QT Designer.
В появившемся диалоговом окне создайте новое диалоговое окно:
Найдите Widget Box в левой части экрана (по умолчанию). Он содержит элемент с именем Line Edit.
Кликните и перетащите этот элемент в форму. Это создаст новый Line Edit в форме.
При выборе нового элемента редактирования строки его свойства будут отображаться на боковой стороне экрана (по умолчанию справа):
Задайте для его имени значение
name
.Используя тот же подход, создайте новый Spin Box Box и задайте для его имени значение
age
.Добавьте Label`с текстом жирным шрифтом ``Add a New Person` (просмотрите свойства объекта, чтобы узнать, как это задать). Можно также задать заголовок самого диалогового окна (вместо добавления надписи).
Добавьте Label к вашему Line Edit и Spin Box.
Упорядочить элементы по собственному желанию.
Кликните в любом месте диалогового окна.
Найдите кнопку Компоновка в макете формы (по умолчанию в инструментах вдоль верхнего края экрана). При этом диалоговое окно будет размещено автоматически.
Установите максимальный размер диалогового окна (в его свойствах) равным
200
(ширина) на150
(высота).Теперь форма должна выглядеть примерно так:
Сохраните свою новую форму как
exercise_data/forms/add_people.ui
Когда закончится сохранение, можете закрыть Qt Designer
5.3.7. Идем дальше: Связывание формы со слоем
Вернитесь в QGIS.
Кликните два раза на слой test-data в легенде для того чтобы открыть свойства.
Кликните на Attributes Form в диалоговом окне Layer Properties.
В раскрывающемся списке Attribute editor layout выберите Provide ui-file.
Кликните кнопку многоточия и выберите только что созданный файл
add_people.ui
:Кликните OK в диалоговом окне Layer Properties.
Переходите в режим редактирования и берите новую точку.
При этом будет представлено ваше пользовательское диалоговое окно (вместо общего, которое обычно создает QGIS).
Если вы кликните по одной из точек с помощью инструмента Identify Features теперь можно вызвать форму, кликнув правой кнопкой мыши в окне определения результатов, и выбрать в контекстном меню.
Если вы находитесь в режиме редактирования для этого слоя, то вместо этого контекстное меню будет отображать
. После этого можно скорректировать атрибут в новой форме даже после первоначальной записисъемке точки.
5.3.8. В заключении
С помощью форм можно облегчить себе жизнь при редактировании или создании данных. Редактируя типы виджетов или создавая совершенно новую форму с нуля, можно контролировать работу того, кто оцифровывает новые данные для этого слоя, минимизируя тем самым недоразумения и ненужные ошибки.
5.3.9. Дополнительные материалы для чтения
Если вы завершили усложнённый раздел выше и знаете о программе Python, вы можете посмотреть `this blog entry `_ запись блога о создании пользовательских форм функций с логикой Python, которая позволяет использовать расширенные функции, включая проверку данных, автозавершение и т.д.
5.3.10. Что дальше?
Открытие формы для идентификации функции является одним из стандартных действий, которые может выполнить QGIS. Однако его можно также направить на выполнение определяемых пользователем действий. Это тема следующего занятия.