创建 Python 加载项工具
创建加载项工具
工具与按钮非常相似。但工具需要用户先与桌面应用程序的显示画面进行交互,然后再根据交互执行某些业务逻辑。ArcMap 中的放大工具 便是一个典型示例,该工具要求用户先在地图上单击或拖出一个矩形,然后才重绘显示画面,进而更详细地显示指定区域的地图内容。
本主题将指导您完成使用 Python 加载项向导在新工具条上创建工具这一过程。开始此工作流之前,请确保已创建 ArcMap 加载项项目并指定项目设置。有关详细信息,请参阅创建加载项项目。此工作流介绍的是如何为 ArcMap 创建工具,但您也可以使用此过程将工具添加到任何 ArcGIS for Desktop 应用程序。本主题详细介绍了“创建渔网”这一简单工具的创建过程。之后会更详细地介绍通过加载项向导创建的 Python 类,以探讨为工具提供功能的属性和方法。
创建加载项工具包含以下几步:
-
创建工具条。
单击加载项内容选项卡开始声明加载项自定义内容。工具可以位于工具条上,但不能位于菜单上。有关创建自己的工具条的步骤,请参阅创建加载项工具条。
- 创建工具。
右键单击新工具条,然后选择新建工具。
工具具有多个属性需要用户设置。以下列出了所有这些属性及其对应的说明。这些属性存储在项目的 config.xml 文件中。
属性
描述
标题(必填)
定义工具的标题。下图显示了 ArcGIS 加载项管理器中使用的标题,有助于标识提供的不同自定义类型(加载项类型在括号中标识):
下图显示了用来标识工具条上工具的作为文本的标题:
类(必填)
表示工具的 Python 类。Python 类是写入工具业务逻辑的位置。此类非常重要,因为每次在桌面应用程序中单击工具时都会执行此类。构造类时应使用 Python 命名约定。Python 类使用单词“首字母大写”标记法。本例中,将创建一个名称为 CreateFishnet 的类。
ID(必填)
用于标识工具的唯一名称。您可以为给定项目创建多个工具,此 ID 便用来区分不同的工具。理想情况下,应使用更有意义的值替换默认 ID。ID 不应包含任何空格。可以使用下划线连接单词。不应使用 Python 关键字。有关保留字信息,请查阅 Python 文档。
工具提示(可选)
将鼠标指针悬停在桌面应用程序中的工具上方时出现的简短描述。
消息(可选)
对工具功能更加详细的描述。与工具提示相同,将鼠标指针悬停在工具上时,此消息会与工具提示一起显示。
图像(可选)
此图像应为 16 * 16 像素的图像,用于符号化工具。图像格式只能为以下格式之一:.png、.gif 或 .bmp。图像将复制到加载项项目中创建的图像文件夹中。
工具的最后部分是帮助标题和内容。这些属性允许您提供一些信息并在用户调用上下文相关帮助时显示。这些信息为弹出主题,在用户单击其他位置之前,会一直保留在屏幕上。
以下属性组成了该上下文相关帮助部分:
属性
描述
标题(可选)
指示帮助内容与哪方面相关
内容(可选)
工具的帮助内容
输入属性后,可单击向导底部的保存。将在工作文件夹中创建所有必需的文件和文件夹。
- 编辑 Python 脚本并更新 Python 类,以包含创建面渔网这一功能。
关注区域通过拖动鼠标创建矩形来定义。渔网的大小设置为 10 行 * 10 列。要将此功能添加到自定义工具,执行以下步骤:
- 在通过向导创建的工作文件夹下的安装文件夹中编辑 Python 脚本。
将生成与通过向导输入的类同名的类。由于会在 config.xml 中引用这一类名称,因此不要重命名此类。有关此类的每个函数和属性的说明,请参阅工具类主题。
- 按如下方式更新函数。
以下代码可提供创建 10 行 * 10 列的面渔网的功能。
def __init__(self): self.enabled = True self.cursor = 3 self.shape = 'Rectangle' def onRectangle(self, rectangle_geometry): """Occurs when the rectangle is drawn and the mouse button is released. The rectangle is a extent object.""" extent = rectangle_geometry # Create a fishnet with 10 rows and 10 columns. if arcpy.Exists(r'in_memory\fishnet'): arcpy.Delete_management(r'in_memory\fishnet') 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() return fishnet
- 保存脚本。
- 在通过向导创建的工作文件夹下的安装文件夹中编辑 Python 脚本。
- 测试工具
创建工具并添加脚本代码后,必须生成加载项文件并测试加载项,然后才能进行共享。相关步骤信息,请参阅测试加载项。
- 部署和共享加载项。
有关部署和共享加载项的步骤,请参阅共享加载项。