7 votos

PyQGIS. autoguardado al añadir una característica

Intento hacer el autoguardado al añadir la función y usar el siguiente código:

def autosave():
    iface.activeLayer().commitChanges()
    iface.activeLayer().startEditing()
    iface.actionAddFeature().trigger()
iface.activeLayer().featureAdded.connect(autosave)

Pero commitChanges() ejecutar una featureAdded y consigo un bucle. También trato de usar la validación de tablas de atributos en las características de búsqueda no guardadas, así:

def autosave():
    features = iface.activeLayer().getFeatures()
    gid = next(features)[0]
    if "nextval" in str(gid):
        iface.activeLayer().commitChanges()
        iface.activeLayer().startEditing()
        iface.actionAddFeature().trigger()

iface.activeLayer().featureAdded.connect(autosave)

Y este código también ejecuta el bucle. ¿Cómo puedo evitar este problema?

6voto

Mue Puntos 2469

Un pequeño truco consiste en desconectar la señal al principio de la función y volver a conectarla al final. No es el más bonito de los métodos, pero es uno que he utilizado bastante a menudo:

def autosave():
    iface.activeLayer().featureAdded.disconnect(autosave)
    iface.activeLayer().commitChanges()
    iface.activeLayer().startEditing()
    iface.actionAddFeature().trigger()
    iface.activeLayer().featureAdded.connect(autosave)

iface.activeLayer().featureAdded.connect(autosave)

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