摘要
TableFrameElement 类提供对功能的访问,允许您修改表格信息在 Layout 类上的显示方式。
说明
表格框元素是一种专门的地图整饰要素,它具有关联的 MapFrame 元素,并且还动态链接到图层或表对象以显示其行和字段。 Layout 类上的 listElements 方法将返回包含所有可能布局元素的 Python 列表。 要仅返回 TableFrameElement 对象的列表,应对 element_type 参数使用 TABLEFRAME_ELEMENT 常量。 还可以使用 wildcard 值,基于元素的 name 值对搜索进行进一步优化。 有必要确保为每个布局元素指定唯一名称,因为这样可以在 ArcPy 脚本中引用它。
Layout 类的 createTableFrameElement 方法可用的所有参数也都在 TableFrameElement 类上公开,例如 mapframe、table 和 fields - 可以对现有表格框进行更改。 您可以使用许多属性来调整表格框的大小和位置。 您还可以使用 sortFields 方法修改表格框的外观,或使用 setQuery 方法控制表中显示的行。 表格框元素还具有可用于修改未向 TableFrameElement 类公开的其他属性的 getDefinition 和 setDefinition 方法。 有关详细信息,请参阅下面的示例和 Python CIM 访问帮助主题。
属性
属性 | 说明 | 数据类型 |
anchor (只读) | 返回表示当前锚点位置的以下字符串值之一。 要更改值,请使用 setAnchor 方法。
| String |
elementHeight (可读写) | 元素的高度(以页面单位计)。 | Double |
elementPositionX (可读写) | 元素的锚点位置的 x 位置。 分配或报告的单位为页面单位。 | Double |
elementPositionY (可读写) | 元素的锚点位置的 y 位置。 分配或报告的单位为页面单位。 | Double |
elementWidth (可读写) |
元素的宽度(以页面单位计)。 | Double |
fields (可读写) |
表示表格框中显示的表字段名称的字符串列表。 | List |
locked (可读写) | 设置为 True 时,无法在布局视图中以图形方式选择元素。 | Boolean |
longName (只读) | 元素的全名,包括组信息(如果存在)。 例如,在一个名称为 Table Frame 的组元素中,名称为 Group Element 的元素将返回 Group Element\\Table Frame 的 longName 值。 如果元素不在组中,则 longName 与 name 值相同。 | String |
mapFrame (可读写) | 对关联 MapFrame 的引用。 | MapFrame |
name (可读写) | 元素的名称。 必须确保所有元素均具有唯一名称,因为这样可以通过在 Layout 对象的 listElements 函数中使用 wildcard 参数以唯一方式引用这些元素。 | String |
parentGroupElement (只读) | 如果元素在组中,则返回的值为 GroupElement,否则返回 NoneType。 | GroupElement |
query (只读) | 返回以下字符串值之一,这些值表示控制应显示哪些行的当前查询。 要更改值,请使用 setQuery 方法。
| String |
table (可读写) | Object | |
type (只读) | 返回值 TABLEFRAME_ELEMENT。 | String |
visible (可读写) | 如果元素在布局上可见,则返回 True。 | Boolean |
方法概述
方法 | 说明 |
applyStyleItem (style_item) | 将 StyleItem 应用于 TableFrameElement。 |
getDefinition (cim_version) | 返回表格框元素的 CIM 定义。 |
setAnchor (anchor) | setAnchor 方法可控制 TableFrameElement 值的锚点位置。 |
setDefinition (definition_object) | setDefinition 方法设置表格框元素的 CIM 定义。 |
setQuery (query_rows) | setQuery 方法控制表格框中的行显示。 |
sortFields (field_info) | sortFields 方法使用一个或多个字段的字典键值对的列表对表格框进行排序。 |
方法
applyStyleItem (style_item)
当在 ArcGISProject 类上使用 listStyleItems 方法引用 StyleItem 时,style_class 参数必须是 TABLE_FRAME。 有关详细信息和代码示例,请参阅 StyleItem 帮助主题。
注:
在使用 applyStyleItem 方法之前,必须先将样式添加到工程中。 可以在 ArcGISProject 类上使用 updateStyles 方法添加样式。
getDefinition (cim_version)
参数 | 说明 | 数据类型 |
cim_version | A string that represents the major version of the CIM that will be used.
| String |
数据类型 | 说明 |
Object | 返回 TableFrameElement 值的 CIM 定义。 |
有关使用 CIM 和示例的详细信息,请参阅 Python CIM 访问。
setAnchor (anchor)
参数 | 说明 | 数据类型 |
anchor | A string that specifies the location of the anchor position.
| String |
设置锚点位置非常有用,因为您可以控制元素在调整大小时的展开方式。 例如,表格框元素的默认锚点位置为 TOP_LEFT_CORNER。 如果将锚点位置更改为 BOTTOM_RIGHT_CORNER,则更改 elementHeight 将使元素向上扩展,而非向下扩展;更改 elementWidth 将使元素向左扩展。
setDefinition (definition_object)
参数 | 说明 | 数据类型 |
definition_object | A modified CIM definition object originally retrieved using getDefinition. | Object |
有关使用 CIM 和示例的详细信息,请参阅 Python CIM 访问。
setQuery (query_rows)
参数 | 说明 | 数据类型 |
query_rows | A keyword string that serves as a filter and specifies the rows that will be displayed in the table frame.
(默认值为 ALL_ROWS) | String |
sortFields (field_info)
参数 | 说明 | 数据类型 |
field_info [field_info,...] | A list of Python dictionaries that each contain field sorting information. The dictionary keys are defined below.
| List |
排序一次适用于所有字段,并且基于 field_info 列表中定义的字段的顺序。 您必须重新创建所有相关字段的所有排序信息并将该信息传递到 field_info 参数中。
代码示例
以下脚本在布局中创建了表格框。 它使用函数来构造用于将表格框放置在布局上的包络矩形。
def MakeRec_UL(ulx, uly, w, h):
xyRecList = [[ulx, uly], [ulx+w, uly], [ulx+w,uly-h], [ulx,uly-h], [ulx,uly]]
array = arcpy.Array([arcpy.Point(*coords) for coords in xyRecList])
rect = arcpy.Polygon(array)
return rect
p = arcpy.mp.ArcGISProject('current')
m = p.listMaps('Map')[0]
lyr = m.listLayers('States*')[0]
lyt = p.listLayouts('Create*')[0]
mf = lyt.listElements()[0]
#States table frame
tfStyle = p.listStyleItems('ArcGIS 2D', 'TABLE_FRAME', 'Blue Alternating Rows')[0]
tfEnv = MakeRec_UL(0.5, 5, 7.5, 4)
tfFields = ['STATE_NAME', 'STATE_ABBR', 'POP2000', 'POP2010']
tf = lyt.createTableFrameElement(tfEnv, mf, lyr, tfFields, tfStyle, 'States TableFrame')
#Display only visible rows
tf.setQuery('VISIBLE_ROWS')
以下脚本引用现有表格框并使用类方法修改其外观。 脚本对通过 Python CIM 访问公开的属性进行其他更改。
p = arcpy.mp.ArcGISProject('current')
lyt = p.listLayouts('Modify*')[0]
tf = lyt.listElements('TABLEFRAME_ELEMENT', 'States*')[0]
#Modify table frame
tf.setQuery('VISIBLE_ROWS')
tf.sort({'name':'STATE_NAME', 'ascending':True, 'caseSensitive':True})
#Modify additional properties using the CIM
tf_cim = tf.getDefinition('V3')
tf_cim.minFontSize = 8
tf_cim.alternate1RowBackgroundCount = 2
tf_cim.alternate2RowBackgroundCount = 2
tf_cim.balanceColumns = False
tf_cim.columnGap = 75
tf_cim.fittingStrategy = 'AdjustColumnsAndSize'
tf.setDefinition(tf_cim)
以下脚本在创建新的表格框之前创建空间地图系列。 它通过将 query 值设置为 MAPSERIES_ROWS 来完成。
def MakeRec_UL(ulx, uly, w, h):
xyRecList = [[ulx, uly], [ulx+w, uly], [ulx+w,uly-h], [ulx,uly-h], [ulx,uly]]
array = arcpy.Array([arcpy.Point(*coords) for coords in xyRecList])
rect = arcpy.Polygon(array)
return rect
p = arcpy.mp.ArcGISProject('current')
m = p.listMaps('Map')[0]
lyr = m.listLayers('GreatLakes')[0]
lyt = p.listLayouts('MapSeries')[0]
mf = lyt.listElements()[0]
#Create a spatial map series
lyt.createSpatialMapSeries(mf, lyr, 'NAME', 'AREA')
#Create a table frame
tfStyle = p.listStyleItems('ArcGIS 2D', 'TABLE_FRAME', 'Orange Alternating Rows')[0]
tfEnv = MakeRec_UL(0.5, 5.75, 7.5, 2)
tf = lyt.createTableFrameElement(tfEnv, mf, lyr, ['NAME', 'AREA'], tfStyle, 'Great Lakes TableFrame')
#Set the query to match mapseries rows
tf.setQuery('MAPSERIES_ROWS')