7 votos

¿Cómo obtener el nombre de archivo del estilo actual usando PyQGIS?

Recibo el nombre del archivo de estilo actual usando layer.styleURI() . A continuación, cambio el archivo de estilo con layer.loadNamedStyle(different_filename) .

Sin embargo, cuando vuelvo a llamar a layer.styleURI() , devuelve el mismo nombre que en la llamada anterior. ¿Cómo puedo obtener el nombre de archivo del estilo actual en QGIS usando Python?

4voto

Elliott Maynard Puntos 11

Te sugiero que para hacer lo que he estado en 1. y elegir si quieres ir a 2. mientras se soluciona el problema en QGIS.

  1. De hecho, hay un problema con esas funciones, para que pueda informar de QGIS devs sobre el tema se encuentra mediante la publicación en el QGIS-dev lista de correo y/o la presentación de informes en el QGIS bug tracker (ver la Presentación de un problema).

  2. Implementar una solución.

    Desde layer.styleURI() no te da la actualización del estilo, usted puede utilizar sus propias funciones para mantener un registro de sus estilos. Por ejemplo, mediante la aplicación de las siguientes funciones, usted podría conseguir estilos actualizados llamando styleURI( layer ) y loadNamedStyle( layer, stylePath ).

    Acaba de definir las funciones de esta manera:

    def loadNamedStyle( layer, stylePath ):
        res = layer.loadNamedStyle( stylePath )
        if res[1]: # Style loaded
            layer.setCustomProperty( "layerStyle", stylePath )
            return True
        return False
    
    def styleURI( layer ):
        return layer.customProperty( "layerStyle", "" )
    

    Una vez que se ha definido, se podría hacer uso de ellos de esta manera:

    layer = iface.activeLayer()
    styleURI( layer ) # Will print "" (A style file hasn't been set) 
    loadNamedStyle( layer, "/path/to/mystyle.qml") # Prints True if style exists and applies it
    styleURI( layer ) # Will print "/path/to/mystyle.qml" if previous line was True
    

    Ya he usado propiedades personalizadas en estas funciones, el estilo de la ruta se guarda a través de sesiones sólo por el ahorro de su proyecto de QGIS.

    Incluso se podría escribir las definiciones de función en una .py archivo (por ejemplo style_functions.py) y guardarlo en la misma carpeta que el proyecto de QGIS. De esta manera, sólo se necesita escribir:

    from style_functions import *
    

    en el QGIS consola de Python para tener las funciones listo para ser utilizado.

Espero que ayude!

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