2 votos

QgsProcessingParameterString(), ¿Guardar la entrada del usuario?

Estoy añadiendo algunas cosas a un plugin de QGIS y tratando de averiguar cómo trabajar con las entradas del usuario. En este caso, la entrada del usuario es una cadena, que parece simple de trabajar, pero no puedo encontrar un ejemplo de ello en cualquier lugar.

No estoy usando Qt Designer para diseñar mi interfaz para el cuadro de diálogo, en su lugar estoy usando varios métodos del Clase QgsProcessingParameters . Concretamente estoy utilizando QgsProcessingParameterString.

En el plugin, estoy usando el initAlgorithm y añadiendo una línea para que el usuario introduzca una cadena. Aquí está el código:

def initAlgorithm(self, config):

#Add String as input
    self.addParameter(
        QgsProcessingParameterString(
            self.INPUT_TITLE,
            self.tr('Input title string (Optional)')
        )
    )

Ahora en el processAlgorithm uso un método .parameterAsString

def processAlgorithm(self, parameters, context, feedback):
    """This actually does the processing for creating the print layout and exporting as .pdf"""

    log = feedback.setProgressText

    input_title = self.parameterAsString(parameters, self.INPUT_TITLE, context)

    log(print the user input)

Sólo estoy tratando de imprimir la entrada del usuario en este ejemplo. ¿Cómo obtengo el valor de la entrada del usuario (una cadena)? Quiero crear una variable que almacene la entrada del usuario como una cadena. Puedo utilizar la cadena más tarde en mi programa.

¿Y hay algún ejemplo de uso de QgsProcessingAlgorithm.parameterAsString?

3voto

Erich Purpur Puntos 26

El simple comentario de @ndawson me dio la confianza de que realmente estaba en el camino correcto

Voy a elaborar mi propia pregunta. En el processAlgorithm, el log imprime cosas en la consola cuando se ejecuta el plugin. Defino input_title como lo siguiente:

def processAlgorithm(self, parameters, context, feedback):

    log = feedback.setProgressText

    input_title = self.parameterAsString(parameters, self.INPUT_TITLE, context)

input_title es ahora sólo una cadena, con el texto que el usuario escribió en el cuadro de diálogo del plugin. Definitivamente estaba pensando demasiado en esto antes.

Mientras se ejecuta el plugin, si quiero devolver el texto de entrada del usuario en la pestaña "registro" de mi plugin, puedo hacerlo:

def processAlgorithm(self, parameters, context, feedback):

    log = feedback.setProgressText

    input_title = self.parameterAsString(parameters, self.INPUT_TITLE, context)

    log(input_title)      #this prints input_title in plugin log

También puedo trabajar con objetos vectoriales o rasterizados de la misma manera. Aquí hay un ejemplo con un objeto vectorial: Primero, cree su clase y cree constantes para referirse a los parámetros. En el initAlgorithm, defina un campo de entrada vectorial. Luego en el processAlgorithm puedes trabajar con el objeto vectorial.

class ClassName(QgsProcessingAlgorithm):
    INPUT_VECTOR = 'INPUT_VECTOR'

    def initAlgorithm(self, config):
    """Here we define the inputs and output of the algorithm"""

        #Add Vector Layer as input
        self.addParameter(
            QgsProcessingParameterVectorLayer(
                self.INPUT_VECTOR,
                self.tr('Choose vector layer as input'),
                [QgsProcessing.TypeVectorAnyGeometry]
            )
        )

    def processAlgorithm(self, parameters, context, feedback):

        log = feedback.setProgressText

        input_vector = self.parameterAsVectorLayer(parameters, self.INPUT_VECTOR, context)

        log(input_vector.name())        #use all the regular attributes and methods for a vector object

Espero que esto ayude a alguien más que a mí.

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