Важно

Translation is a community effort you can join. This page is currently translated at 78.41%.

5.3. Lesson: Forms

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

К счастью, QGIS позволяет создавать собственные диалоговые окна для слоя. На этом занятии показывается как это сделать.

Цель этого занятия: создать форму для слоя.

5.3.1. ★☆☆ Follow Along: Using QGIS“ Form Design Functionality

  1. Выберите слой roads на панели Layers.

  2. Переходите в режим редактирования, как и ранее.

  3. Откройте таблицы атрибутов слоя roads дорог.

  4. Кликните правой кнопкой мыши любую ячейку в таблице. Появится короткое меню, включающее Open form.

  5. Кликните его, чтобы увидеть форму, которую QGIS создает для этого уровня.

Очевидно, что было бы неплохо делать это, глядя на карту, вместо того, чтобы постоянно искать конкретную улицу в таблице атрибутов Attribute Table.

  1. Выберите слой roads на панели  Layers.

  2. С помощью инструмента Идентификация функций Identify Features кликните любую улицу на карте.

  3. Панель Identify Results откроется, на которой отображается «дерево» значений полей и другая общая информация о выбранной функции.

  4. At the top of the panel, check the Auto open form for single feature results checkbox in the options Identify Settings menu.

  5. Теперь кликните еще раз на любой улице на карте. В предыдущем диалоговом окне Identify Results отображается знакомая форма:

    ../../../_images/roads_form.png
  6. Каждый раз когда вы кликаете по одной функции с помощью инструмента Идентифицировать его форма появляется при условии, что установлен флажок Автоматически открывать форму Auto open form.

5.3.2. ★☆☆ Try Yourself: Using the Form to Edit Values

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

  1. Активировать режим редактирования (если он еще не активирован).

  2. С помощью инструмента Определить функции identify Identify Features кликните главную улицу, проходящую через Swellendam Swellendam:

    ../../../_images/main_street_selected.png
  3. Редактируйте его значение highway как secondary.

  4. Выходите из режима редактирования и сохраняйте изменения.

  5. Откройте таблицу атрибутов Attribute Table и отметьте что значение было обновлено в таблице атрибутов и, следовательно, в исходных данных.

5.3.3. ★★☆ Follow Along: Setting Form Field Types

Приятно редактировать вещи с помощью формы, но все равно надо вводить все вручную. К счастью, формы имеют различные виды так называемых виджетов, которые позволяют редактировать данные различными способами.

  1. Откройте roads слоя Properties…

  2. Переедите на вкладку Fields. Вы увидите это:

    ../../../_images/fields_panel.png
  3. Перейдите на вкладку Attributes Form. Вы увидите это:

    ../../../_images/attributes_form.png
  4. Кликните на ряд oneway и выберите Checkbox как Widget Type в списке вариантов:

    ../../../_images/checkbox_selected.png
  5. Кликните OK

  6. Переход в режим редактирования (если слой roads не находится уже в режим редактирования)

  7. Кликните на инструмент identify Identify Features.

  8. Кликните на ту же главную дорогу, которую вы выбрали ранее.

Теперь вы увидите, что oneway однонаправленный атрибут имеет флажок рядом с ним, обозначающий True (флажок) или  False (нет флажка).

5.3.4. ★★★ Try Yourself:

Задайте более подходящий виджет формы для поля highway.

5.3.5. ★★★ Try Yourself: Creating Test Data

Также можно полностью создать собственную пользовательскую форму.

  1. Создайте простой слой точек с именем test-data с двумя атрибутами:

    • название (текст)

    • возраст (целое число)

    ../../../_images/new_point_layer.png
  2. Зафиксируйте несколько точек на новом слое с помощью инструментов оцифровки, чтобы у вас было немного данных для воспроизведения. При каждой записисъемке новой точки вам должна быть представлена форма записи атрибутов, сгенерированных QGIS по умолчанию.

    Примечание

    Может потребоваться отключить привязку, если она все еще включена для предыдущих задач.

    ../../../_images/new_point_entry.png

5.3.6. ★★★ Follow Along: Creating a New Form

Теперь мы хотим создать собственную пользовательскую форму для фазы сбора данных атрибутов. Для этого необходимо установить Дизайнер QT (только для лица, создающего формы).

  1. Запустить QT Designer.

  2. В появившемся диалоговом окне создайте новое диалоговое окно:

    ../../../_images/qt_new_dialog.png
  3. Найдите  Widget Box в левой части экрана (по умолчанию). Он содержит элемент с именем Line Edit.

  4. Кликните и перетащите этот элемент в форму. Это создаст новый Line Edit в форме.

  5. При выборе нового элемента редактирования строки его свойства будут отображаться на боковой стороне экрана (по умолчанию справа):

    ../../../_images/qt_line_edit.png
  6. Задайте для его имени значение name.

  7. Используя тот же подход, создайте новый Spin Box Box и задайте для его имени значение age.

  8. Добавьте Label`с текстом жирным шрифтом ``Add a New Person` (просмотрите свойства объекта, чтобы узнать, как это задать). Можно также задать заголовок самого диалогового окна (вместо добавления надписи).

  9. Добавьте Label к вашему Line Edit и Spin Box.

  10. Упорядочить элементы по собственному желанию.

  11. Кликните в любом месте диалогового окна.

  12. Найдите кнопку Компоновка в макете формы (по умолчанию в инструментах вдоль верхнего края экрана). При этом диалоговое окно будет размещено автоматически.

  13. Установите максимальный размер диалогового окна (в его свойствах) равным 200 (ширина) на  150 (высота).

  14. Теперь форма должна выглядеть примерно так:

    ../../../_images/qt_example_form.png
  15. Сохраните свою новую форму как  exercise_data/forms/add_people.ui

  16. Когда закончится сохранение, можете закрыть Qt Designer

5.3.7. ★★★ Follow Along: Associating the Form with Your Layer

  1. Вернитесь в QGIS.

  2. Кликните два раза на слой test-data в легенде для того чтобы открыть свойства.

  3. Кликните на Attributes Form в диалоговом окне Layer Properties.

  4. В раскрывающемся списке Attribute editor layout выберите Provide ui-file.

  5. Кликните кнопку многоточия и выберите только что созданный файл  add_people.ui:

    ../../../_images/provide_ui_file.png
  6. Кликните OK в диалоговом окне Layer Properties.

  7. Переходите в режим редактирования и берите новую точку.

  8. При этом будет представлено ваше пользовательское диалоговое окно (вместо общего, которое обычно создает QGIS).

  9. Если вы кликните по одной из точек с помощью инструмента identify Identify Features теперь можно вызвать форму, кликнув правой кнопкой мыши в окне определения результатов, и выбрать View Feature Form в контекстном меню.

  10. Если вы находитесь в режиме редактирования для этого слоя, то вместо этого контекстное меню будет отображать Edit Feature Form. После этого можно скорректировать атрибут в новой форме даже после первоначальной записисъемке точки.

5.3.8. In Conclusion

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

5.3.9. Further Reading

Если вы завершили усложнённый раздел выше и знаете о программе Python, вы можете посмотреть `this blog entry `_ запись блога о создании пользовательских форм функций с логикой Python, которая позволяет использовать расширенные функции, включая проверку данных, автозавершение и т.д.

5.3.10. What’s Next?

Открытие формы для идентификации функции является одним из стандартных действий, которые может выполнить QGIS. Однако его можно также направить на выполнение определяемых пользователем действий. Это тема следующего занятия.