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.
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
-
comprobar la longitud de
sels
comparado conself.selectlines
, si es más de uno más largo, lanza un error – si es más corto, bueno, tienes que decidir. (vea abajo) -
if len(sels) - len(self.selectlines) == 1
verifique qué elementos ensels
eso no esta enself.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.selectlines
arroje 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.