创建 Python 加载项应用程序扩展模块

创建 Python 加载项应用程序扩展模块

可以通过多种方法使用应用程序扩展模块,从而为 ArcGIS for Desktop 提供补充功能。

可将应用程序扩展模块配置为在需要时进行加载,也可配置为在其关联应用程序启动时自动加载;扩展模块还可以被配置为显示在位于“自定义”菜单下的标准 ArcGIS 扩展模块对话框中。

本主题将指导您完成应用程序扩展模块的创建过程。开始此工作流之前,请确保已创建 ArcMap 加载项项目并指定项目设置。有关详细信息,请参阅创建加载项项目。此工作流说明了如何为 ArcMap 创建扩展模块;但为任何 ArcGIS for Desktop 应用程序创建菜单时采用的工作流与此并无差异。本主题详细介绍了扩展模块的创建过程,每次打开文档或创建新文档时,该扩展模块都会向 ArcMap 添加基础图层。之后会更详细地介绍通过 Python 加载项向导 创建的 Python 类,以探讨为扩展模块提供功能的属性和方法。

创建加载项应用程序扩展模块包含两个步骤:

步骤:
  1. 创建应用程序扩展模块。

    输入所需项目设置后,单击加载项内容选项卡。要开始创建,请右键单击扩展模块,然后单击“新建扩展模块”。

    设置应用程序扩展模块加载项属性

    扩展模块具有多个属性需要用户输入。以下列出了所有这些属性及其对应的说明。这些属性存储在项目的 config.xml 文件中。

    属性

    描述

    名称(必填)

    表示应用程序扩展模块的名称。在以下屏幕截图中,该名称即为“扩展模块”对话框中用于桌面应用程序的名称。

    将应用程序扩展模块添加到 Desktop

    类名称(必填)

    表示扩展模块的 Python 类。Python 类是写入扩展模块业务逻辑的位置。此类非常重要,因为在桌面应用程序中使用应用程序扩展模块时会对其进行调用。构造类时应使用 Python 命名约定。Python 类使用单词首字母大写标记法。本例中,我们创建的类的名称为 AddBaseLayer。

    ID(必填)

    这是用于标识扩展模块的唯一名称。您可以为给定项目创建多个扩展模块,此 ID 被用来区分不同的应用程序扩展模块。理想情况下,应使用更有意义的 ID 值替换默认 ID 值。ID 不应包含任何空格。可以使用下划线连接单词。不应使用 Python 关键字。有关保留字信息,请查阅 Python 文档。加载项命名空间将作为 ID 的前缀。命名空间存储在 config.xml 文件中。

    描述(可选)

    描述应用程序扩展模块的用途。例如,3D Analyst 扩展模块提供地表建模和 3D 可视化工具。描述显示在“扩展模块”对话框底部。

    自动加载(可选)

    允许在打开桌面应用程序时自动加载应用程序扩展模块。默认情况下,此选项处于选中状态。选中此选项后,Python 脚本中已启用的属性将设置为 True

    输入属性后,可单击向导底部的保存按钮。将在工作文件夹中创建所有必需的文件和文件夹。

  2. 编辑 Python 脚本。

    下一步是编辑 Python 脚本并更新 Python 类,以包含在每次打开或创建地图文档时添加基础图层这一功能。此功能通过监听并响应 ArcMap 的 openDocumentnewDocument 事件来实现。要将此功能添加到自定义扩展模块,执行以下步骤:

    1. 在通过向导创建的工作文件夹下的安装文件夹中编辑 Python 脚本。

      将生成与通过向导输入的类同名的类。由于会在 config.xml 中引用了这一类名称,因此不应重命名此类。有关扩展类中各个函数的详细信息,请参阅扩展类主题。

    2. 按如下方式更新 newDocumentopenDocument 事件函数。

      以下代码可提供将基础图层添加到活动数据框(若其中尚不存在基础图层)这一功能。

      def newDocument(self):
      
          """
          Adds a base layer if it is not already added to the active data frame of the map.
          """
      
          # Provide a layer file and the layer name as it would appear in the Table of contents. 
          base_layer = r'C:\GISData\module5\World_Street_Map.lyr'
          base_layer_name = 'World Street Map'
          mxd = arcpy.mapping.MapDocument('current')
          active_view = mxd.activeView
          df = arcpy.mapping.ListDataFrames(mxd, active_view)[0]
          if arcpy.mapping.ListLayers(mxd, base_layer_name) == []:
              arcpy.mapping.AddLayer(df, arcpy.mapping.Layer(base_layer))
              arcpy.RefreshTOC()
          else:
              return   
      	
      def openDocument(self):
          """
          Adds a base layer if it is not already added to the active data frame of the map.
          """
      
          base_layer = r'C:\GISData\module5\World_Street_Map.lyr'
          base_layer_name = 'World Street Map'
          mxd = arcpy.mapping.MapDocument('current')
          active_view = mxd.activeView
          df = arcpy.mapping.ListDataFrames(mxd, active_view)[0]
          if arcpy.mapping.ListLayers(mxd, base_layer_name) == []:
              arcpy.mapping.AddLayer(df, arcpy.mapping.Layer(base_layer))
              arcpy.RefreshTOC()
          else:
              return
      
    3. 从脚本中删除所有未执行的函数。

      必须从脚本中删除所有未执行的函数。这样可以确保应用程序不会调用这些函数。

    4. 保存脚本。
  3. 测试应用程序扩展模块。

    创建应用程序扩展模块并添加了脚本代码后,必须创建加载项文件并予以测试,之后才能进行共享,这一点非常重要。相关步骤信息,请参阅测试加载项

  4. 部署和共享应用程序扩展模块。

    有关部署和共享加载项的步骤,请参阅共享加载项

相关主题

5/10/2014