Saltar al contenido

Obtener una lista ordenada de identificadores de objetos seleccionados usando PyQGIS

Estate atento ya que en esta noticia vas a encontrar el arreglo que buscas.

Solución:

Utilice este guión:

selection = []

def selection_changed(selected, deselected, clearAndSelect):
    global selection

    # If the user deselects feature(s), remove ID's from list
    if deselected:
        selection = [ID for ID in selection if ID not in deselected]
        print(f"Selection: selection")
    else: 
        # get newly selected IDs
        new_selected = list(set(selected) - set(selection))
        print(new_selected)

        # if multiple objects are selected, deselect them and warn the user
        if len(new_selected) > 1:
            print("Select just one item!")
            iface.activeLayer().deselect(new_selected)
            return

        # if one object is selected, add its ID to list
        selection.extend(new_selected)
        print(f"Selection: selection")

iface.activeLayer().selectionChanged.connect(selection_changed)

Tenga en cuenta que selectionChanged no funciona todas las capas. Quiero decir, después de ejecutar el script, si selecciona otra capa, también debe ejecutar el script para esa capa.

ingrese la descripción de la imagen aquí

Hago algo similar en mi stripchartplugin en https://github.com/sickel/qgisstripchart/blob/master/stripchart.py

Cuando inicio, defino un array:

self.selectlines=[]

Configuré una señal:

self.iface.mapCanvas().selectionChanged.connect(self.markselected)

y en self.markselected puedo hacer

sels=self.view.layer.selectedFeatures()

dónde self.view.layer se establece en otro lugar y es la capa en la que estoy trabajando y comparar sels con self.selectlines

Para mis propósitos, la clasificación de las listas no importa, pero lo que puede hacer es probablemente

  1. comprobar la longitud de sels comparado con self.selectlines, si es más de uno más largo, lanza un error – si es más corto, bueno, tienes que decidir. (vea abajo)

  2. if len(sels) - len(self.selectlines) == 1verifique qué elementos en sels eso no esta en self.selectlines y añádelo.

La dificultad surge si un usuario hace algo inesperado, siempre lo hará, por ejemplo, si un usuario ha seleccionado 10 elementos, anula la selección de todo y vuelve a seleccionar otros 11 elementos, debe poder manejar eso.

(la solución probablemente será verificar si hay más de un elemento que está en sels eso no esta en self.selectlinesarroje un error si es así, pero cómo verificarlo es Python más general que QGIS)

Más adelante puedes encontrar las observaciones de otros programadores, tú también tienes la opción de mostrar el tuyo si dominas el tema.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *