11 votos

¿Refrescar la tabla de atributos abierta en ArcMap utilizando ArcPy en lugar de ArcObjects?

Estoy ejecutando la herramienta Calcular Campo GP desde el arcpy en ArcMap. Cuando se actualiza el valor de una fila, no aparece hasta que utilizo la herramienta Recargar caché (Opciones de tabla > Recargar caché). ¿Cómo puedo actualizar la tabla de atributos automáticamente sin utilizar ArcObjects?

He intentado actualizar la consulta de definición como sugirió @blah238 Utilizando python, ¿cómo "recargar la caché" de una tabla de atributos abierta? pero esto no ayuda. Restablecer el origen de datos no es una opción porque la clase de función podría estar en la sesión de edición y no quiero perder la conexión con los datos de origen.

4voto

UnkwnTech Puntos 21942

Usted parece estar golpeando una limitación de ArcPy, en ausencia de ArcObjects.

Las limitaciones de ArcPy.mapping se han descrito a grandes rasgos ici como:

Arcpy.mapping no es un sustituto de ArcObjects, sino más bien una alternativa para los diferentes escenarios que soporta. ArcObjects es todavía necesario para el desarrollo de grano más fino y aplicación personalización de aplicaciones, mientras que arcpy.mapping está pensado para automatizar el contenido de documentos cartográficos y archivos de capas existentes.

Si la otra sugerencia de @blah238 de utilizar ArcObjects de ArcPy no es una opción para usted, entonces lo mejor es que envíe un Idea ArcGIS para tener esta funcionalidad expuesta a ArcPy. Si publica un enlace a una idea ArcGIS tal aquí, entonces estaré encantado de votar por ella.

4voto

Stas Berkov Puntos 101

Esto puede o no ser útil para su flujo de trabajo específico. He descubierto que si cambia la selección de la capa, la tabla de atributos también se actualiza.

Por eso suelo utilizar

arcpy.SelectLayerByAttribute_management("MY-LAYER","CLEAR_SELECTION")

Por supuesto, si tienes algo seleccionado que no quieres perder de vista, esto no es bueno. En ese caso puede seleccionar desde la capa donde el OID está en la lista de OIDs de las características actualmente seleccionadas (básicamente cambiar la selección a lo que ya está actualmente seleccionado). Esto puede llevar mucho tiempo en la práctica, nunca lo he probado en la vida real.

1voto

CesarB Puntos 908

¿Lo has intentado?

arcpy.RefreshCatalog(target) # Set the target to your layers data source

o

arcpy.RefreshActiveView() # Refreshes the map

o

arcpy.RefreshTOC() # I highly doubt this will do anything, but you never know

Creo que uno de ellos funcionará, pero sé que a veces en ArcMap tengo que cerrar manualmente la tabla de atributos y luego volver a abrirla para ver algunas ediciones. No estoy seguro de si el cierre y la apertura de la tabla se puede hacer con ArcPy, pero que también sería una opción.

1voto

PhCguy Puntos 6

Esto funciona:

    import arcpy

    definition_query = layer.definitionQuery
    # Change the Definition Query into something different
    if definition_query == '':
        oid = arcpy.ListFields(dataset = layer, field_type = 'OID')[0]
        layer.definitionQuery = '{} > 0'.format(oid.name)
    else:
        layer.definitionQuery = ''
    arcpy.RefreshActiveView()

    # Restore the Definition Query
    layer.definitionQuery = definition_query
    arcpy.RefreshActiveView()

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X