Создание встроенного поля со списком
Поле со списком состоит из редактируемого поля и ниспадающего списка. Пользователь может выбрать значение из ниспадающего списка, который появляется по запросу пользователя. Если вы делаете поле со списком редактируемым, оно будет включать редактируемое поле, в котором пользователь может ввести свое значение. Поле со списком для масштабов в ArcMap является хорошим примером таких полей. При добавлении данных с известной системой координат в ArcMap появляется поле со списком масштабов, которое предоставляет вам для выбора набор определенных масштабов. Оно также позволяет вам ввести желаемый масштаб, если он не указан в списке, и карта будет отображена для добавленного вами значения.
Данный раздел ознакомит вас с процессом создания поля со списком для новой панели инструментов с использованием Мастера надстроек Python. Прежде, чем начать этот процесс, убедитесь, что вы создали проект надстройки ArcMap и указали параметры проекта. Более подробно см. Создание проекта надстройки. В этом рабочем процессе показано, как создать поле со списком для ArcMap, но вы можете использовать его для создания поля со списком для любого приложения ArcGIS for Desktop. В разделе описывается процесс создания поля со списком, содержащим список слоев из таблицы содержания. Выбор слоя приведет к созданию сетки, соответствующей полному экстенту слоя. Класс Python, созданный Мастером надстроек, затем детально изучается, что позволяет узнать о свойствах и методах, обеспечивающих функционирование поля со списком.
Создание поля со списком состоит из следующих шагов:
- Создание панели инструментов.
После ввода необходимых настроек проекта, щелкните закладку Содержание надстройки (Add-In Contents) и приступите к настройке. Поле со списком может располагаться на панели инструментов, но не в меню. См. Создание панели инструментов надстроек, где описаны шаги по созданию панели инструментов.
- Создать поле со списком.
После задания свойств панели инструментов, можно приступить к созданию нового поля со списком. Щелкните правой кнопкой мыши новую панель инструментов и выберите Новое поле со списком (New Combo Box) в контекстном меню.
Поле со списком имеет некоторое количество свойств, которые необходимо задать. Эти свойства хранятся в файле config.xml проекта. Ниже представлен список всех параметров с описанием каждого из них.
Свойство Описание Название (обязательный)
Задает заголовок поля со списком. На рисунке ниже показан заголовок, использованный в ArcGIS Add-In Manager, что помогает различать разные типы доступных оформлений (тип надстройки указан в скобках):
Класс (обязательный)
Класс Python служит для записи бизнес-логики поля со списком. Этот класс очень важен, поскольку он выполняется при редактировании поля со списком или изменении выборки. При создании класса используйте соглашения о наименовании, принятые в Python. Классы Python используют нотацию CapWords, при которой каждое слово пишется с большой буквы. В этом примере создан класс "LayersComboBox".
ID(обязательный)
Уникальное имя, которое используется для идентификации поля со списком. Имеется возможность создавать несколько полей со списком в одном проекте; этот ID используется для их различения. В идеальном случае вы должны заменить идентификатор по умолчанию на более осмысленное значение. Идентификатор не должен содержать пробелов. Вы можете использовать символ подчеркивания для того, чтобы соединять слова. Нельзя использовать ключевые слова Python. Список зарезервированных слов доступен в документации Python.
Всплывающая подсказка (опциональный)
Краткое описание, которое появляется, когда курсор мыши задерживается над полем со списком в настольном приложении.
Сообщение (опциональный)
Подробное описание назначения поля со списком. Это сообщение появляется в окне подсказки, когда курсор мыши задерживается над полем со списком.
Hint Text (дополнительно)
Текст, отображающийся в поле со списком, когда оно не активно в настольном приложении. Этот текст может использоваться для ознакомления пользователя с типами элементов, которые можно выбрать в поле со списком, и об их особенностях.
Последний раздел - заголовок справки и содержание. Эти свойства позволяют вам предоставить информацию, которая отобразится, когда пользователь запустит контекстно-зависимую справку. Контекстно-зависимая справка представляет собой всплывающие сообщения, которые остаются на экране, пока пользователь не нажмет на другой объект.
Следующие свойства составляют этот контекстно-зависимый раздел справки:
Свойство Описание Заголовок (опциональный)
Описывает тематику раздела справки
Content (дополнительно)
Содержание справки поля со списком
Как только вы установили все параметры, нажмите на кнопку Сохранить (Save) в нижней части мастера. Все необходимые файлы и папки будут созданы в вашей рабочей папке.
- Редактирование скрипта Python.
На этом этапе вы завершили добавление значений свойств, необходимых для построения поля со списком. Следующий шаг - отредактировать скрипт Python и обновить класс Python, чтобы включить в него функции создания сетки полигонов. Поле со списком будет заполнено списком слоев из активного фрейма данных. При выборе слоя из списка, создается сеть, использующая экстент слоя, размером 10 строк на 10 столбцов. Чтобы добавить эту функцию в поле со списком, выполните следующие шаги:
- Отредактируйте скрипт Python, находящийся в папке Install, расположенной в рабочей папке, которую вы создали при помощи мастера.
В скрипте находится класс с таким же названием, какое вы ввели в мастере. Не следует переименовывать этот класс, поскольку на имя класса содержится ссылка в config.xml. Класс состоит из нескольких функций и свойств, описанных в разделе Класс Combo box.
- Отредактируйте функции, как показано ниже.
Этот код обеспечивает функциональность для создания сети полигонов, размером 10 строк на 10 столбцов, используя экстент слоя, выбранного в поле со списком.
# Business logic to implement the ComboBox def __init__(self): self.editable = True self.enabled = True def onSelChange(self, selection): # When a new layer is selected, create a new fishnet using the extent of layer. layer = arcpy.mapping.ListLayers(self.mxd, selection)[0] desc = arcpy.Describe(layer.dataSource) extent = desc.Extent fishnet = arcpy.CreateFishnet_management(r'in_memory\fishnet', '%f %f' %(extent.XMin, extent.YMin), '%f %f' %(extent.XMin, extent.YMax), 0, 0, 10, 10, '%f %f' %(extent.XMax, extent.YMax), 'NO_LABELS', '%f %f %f %f' %(extent.XMin, extent.YMin, extent.XMax, extent.YMax), 'POLYGON') arcpy.RefreshActiveView() def onFocus(self, focused): # When the combo box has focus, update the combo box with the list of layer names. if focused: self.mxd = arcpy.mapping.MapDocument('current') layers = arcpy.mapping.ListLayers(self.mxd) self.items = [] for layer in layers: self.items.append(layer.name)
- Сохраните скрипт.
- Отредактируйте скрипт Python, находящийся в папке Install, расположенной в рабочей папке, которую вы создали при помощи мастера.
- Проверка поля со списком.
После создания поля со списком и добавления кода скрипта, важно создать файл надстройки и проверить его, прежде, чем предоставить его в общий доступ. Список необходимых шагов приведен в разделе Проверка надстройки.
- Совместное использование надстройки.
После проверки поля со списком, если все работает правильно, можно приступить к его развертыванию и предоставлению общего доступа. Дополнительные сведения см. в разделе Общий доступ к надстройке.