StyleItem

摘要

StyleItem 对象可用于访问样式元素的属性和方法。

说明

您用于在地图或布局中显示要素或图形元素的符号存储在样式文件 (.stylx) 中。 可以使用与“目录”视图相关联的目录功能区来创建、查看和修改样式及其内容。 系统样式将组织到唯一名称(例如 ArcGIS 2D、ArcGIS 3D 等)和名为收藏夹的个人样式中。 样式包含按 styleClass 值组织的样式项目,例如点符号、图例和比例尺。 自定义 style 值是一个 .stylx 文件,该文件具有文件夹路径和以 .stylx 结尾的文件名。 自定义样式必须随工程一起加载和保存。 通过传递其完整路径和文件名来进行引用,而不仅仅是系统样式中的名称。

通过 StyleItem 类,您可以在布局中和地图的图形图层中创建元素。 要引用现有样式项目,请使用 ArcGISProject 类上的 listSytleItems 方法并为要创建的元素类型指定相应的 style_class 值。 wildcard 值可用于优化搜索。 可以通过测试 categorytags 属性的值来进一步优化搜索。 以下方法接受使用 styleItem 值作为参数:

  • Layout 类中的 createMapSurroundcreateTableFrameElement 方法。
  • ArcGISProject 类上的 createGraphicElementcreatePredefinedGraphicElementcreateTextElement 方法。

注:

例如,在创建新的布局元素时,工程中必须存在样式才能使用个别样式项。 通过 ArcGISProject 对象上的 updateStyles 方法,可以向工程中添加样式。 请参考以下示例,确保工程中存在样式。

属性

属性说明数据类型
category
(只读)

返回表示项目的类别的字符串。 如果值不存在,将返回空白字符串。

String
name
(只读)

返回表示项目在符号库类别视图中的名称的字符串。

String
style
(只读)

返回表示 ArcGIS 2D 等系统样式名称、收藏夹等个人样式或自定义 .stylx 文件的字符串。

注:

必须在将样式添加到工程后,才能使用 listStyleItems 引用这些样式。 要引用自定义 .stylx 文件,使用在应用程序中显示的名称。 可使用目录窗格查看此项。

String
style_class
(只读)

返回表示项目在目录视图中的样式类的字符串。 当前支持的类如下:

  • LEGEND用于创建或修改图例元素。
  • LINE用于创建或修改折线图形元素。
  • NORTH_ARROW用于创建或修改指北针地图整饰要素元素。
  • POINT用于创建或修改点图形元素。
  • POLYGON用于创建或修改面图形元素。
  • SCALE_BAR用于创建或修改比例尺地图整饰要素元素
  • TEXT用于创建或修改文本图形元素。
String
tags
(只读)

返回表示与项目相关的标签的字符串。 如果值不存在,将返回空白字符串。

String

代码示例

StyleItem 示例 1

以下脚本演示了以多种方式使用 listStyleItems 方法。

p = arcpy.mp.ArcGISProject('current')

#Print the point symbol names for all arrow related items in ArcGIS 2D
for styleItem in p.listStyleItems('ArcGIS 2D', 'POINT', 'Arrow*'):
    print(f'StyleItem Name: {styleItem.name}')


#Print polygon symbol names for ArcGIS 2D items from a catagory called shapes
for styleItem in p.listStyleItems('ArcGIS 2D', 'POLYGON'):
    if styleItem.category == 'Shapes':
        print(f'StyleItem Name: {styleItem.name}')


#Print all symbol names for a few style classes in a custom style belonging to a category
for styleClass in ['Point', 'Line', 'Polygon']:
    print(f'Style Class:{styleClass}\n')

    customStylePath = r'C:\Projects\MyOwnStyleFile.stylx'
    for styleItem in p.listStyleItems(customStylePath, styleClass):
        if styleItem.category == 'Capitol Forest':
            print(f'    StyleItem Name: {styleItem.name}')
    print('\n')
StyleItem 示例 2

以下脚本使用系统 ArcGIS 2D 样式、系统 Favorites 样式和自定义样式文件创建布局、地图、地图框和 3 个地图整饰要素。

def MakeRec_LL(llx, lly, w, h):
    xyRecList = [[llx, lly], [llx, lly+h], [llx+w,lly+h], [llx+w,lly], [llx,lly]]
    array = arcpy.Array([arcpy.Point(*coords) for coords in xyRecList])
    rec = arcpy.Polygon(array)
    return rec

p = arcpy.mp.ArcGISProject('current')

#Create a layout, map and mapframe
m = p.createMap('New Map', 'Map')
lyt = p.createLayout(8.5, 11, 'INCH', 'New Layout')
mf = lyt.createMapFrame(MakeRec_LL(0.5,5.5,7.5,5), m, "New Map Frame")
lyt.openView()

#Create scale bar using the system 'ArcGIS 2D' style
sbName = 'Double Alternating Scale Bar 1 Metric'
sbStyItm = p.listStyleItems('ArcGIS 2D', 'SCALE_BAR', sbName)[0]
sbEnv = MakeRec_LL(0.5, 5.5, 2.5, 0.5)
sb = lyt.createMapSurroundElement(sbEnv, 'Scale_bar', mf, sbStyItm)

#Create north arrow using the system 'Favorites' style
naStyItem = p.listStyleItems('Favorites', 'North_Arrow', 'Compass North 1')[0]
lyt.createMapSurroundElement(arcpy.Point(7,7), 'North_Arrow', mf, naStyItem)
                      
#Create a legend using a custom stylx file
customStylePath = r'C:\Projects\MyOwnStyleFile.stylx'
styleItemList = p.styles
if not customStylePath in styleItemList:
    styleItemList.append(customStylePath)
    p.updateStyles(styleItemList)
legStyItm = p.listStyleItems(customStylePath, 'LEGEND', 'Legend 2')[0]
lyt.createMapSurroundElement(arcpy.Point(0.5, 5), 'Legend', mf, legStyItm)
StyleItem 示例 3

以下脚本使用 applyStyleItem 方法通过系统 ArcGIS 2D 样式、系统 Favorites 样式和自定义样式文件,将样式项应用于现有的布局元素。

p = arcpy.mp.ArcGISProject('current')
lyt = p.listLayouts('New Layout')[0]

#Modify the scale bar using the system 'ArcGIS 2D' style
sbName = 'Alternating Scale Bar 1 Metric'
sbStyItm = p.listStyleItems('ArcGIS 2D', 'SCALE_BAR', sbName)[0]
sb = lyt.listElements('MAPSURROUND_ELEMENT', 'Scale Bar')[0]
sb.applyStyleItem(sbStyItm)

#Modify the north arrow using the system 'Favorites' style
naStyItem = p.listStyleItems('Favorites', 'North_Arrow', 'ArcGIS North 10')[0]
na = lyt.listElements('MAPSURROUND_ELEMENT', 'North Arrow')[0]
na.applyStyleItem(naStyItem)
                      
#Modify a legend using a custom stylx file but make sure it is added to the project first
customStylePath = r'C:\Projects\MyOwnStyleFile.stylx'
styleItemList = p.styles
if not customStylePath in styleItemList:
    styleItemList.append(customStylePath)
    p.updateStyles(styleItemList)
legStyItm = p.listStyleItems(customStylePath, 'LEGEND', 'Legend 1')[0]
leg = lyt.listElements('LEGEND_ELEMENT', 'Legend')[0]
leg.applyStyleItem(legStyItm)