Enumérations dynamiques dans un plugin processing

Bonjour,

J’ai posé la question sur Georezo mais sans réponse je me permets de la poser ici, désolé pour le doublon.

Je cherche à créer un plugin via processing pour lequel j’aimerai que les paramètres d’entrée soient des énumérations dynamiques (soit, énumération 2 dépend de ce que l’on a choisi dans enumération1). Dans mon cas exact, il s’agirait de choisir une base (rp popluation, filosofi …) puis dans la 2ème énumération de choisir un millésime parmi ceux disponibles pour la base choisie.

Avec des entrées de type QgsProcessingParameterField il est possible de passer une option parentLayerParameterName=“MaSource” pour faire référence à une couche précedemment choisie, mais avec QgsProcessingParameterEnum cette option n’est pas disponible.

Je cherche désespéremment depuis quelques jours, j’ai même fini par me faire violence et me résigner a demander à chargpt qui me sort un code ne fonctionnant pas que je joins pour l’exemple :

class TestAlgorithm(QgsProcessingAlgorithm):
    CATEGORY = 'CATEGORY'
    ITEM = 'ITEM'
   
    def initAlgorithm(self, config=None):
        # Define the first enum parameter: Category
        self.addParameter(
            QgsProcessingParameterEnum(
                self.CATEGORY,
                self.tr('Category'),
                options=['Fruit', 'Vegetables']
            )
        )

        # Define the second enum parameter: Item, initially empty
        self.addParameter(
            QgsProcessingParameterEnum(
                self.ITEM,
                self.tr('Item'),
                options=[],
                optional=True
            )
        )


    def updateParameters(self, parameters, context):
        # Get the selected category
        category_index = self.parameterAsEnum(parameters, self.CATEGORY, context)
        category = ['Fruit', 'Vegetables'][category_index]

        # Update the item parameter based on the selected category
        if category == 'Fruit':
            parameters[self.ITEM].setOptions(['Apple', 'Banana', 'Orange'])
        elif category == 'Vegetables':
            parameters[self.ITEM].setOptions(['Carrot', 'Potato', 'Tomato'])
        else:
            parameters[self.ITEM].setOptions([])

        return super().updateParameters(parameters, context)

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

Quelqu’un aurait-il une idée ? Merci d’avance !

Salut,

J’pense que l’unique solution est de regarder du côté d’un widget custom.
Un exemple ici : pyqgis - How to chose a Vector layer, chose a field, then chose values using parameterAsEnums - Geographic Information Systems Stack Exchange

Merci ! Je vais regarder ça.

Et moi qui pensais m’embarquer dans un truc simple (il y juste quatre param a passer pour requêter un fichier parquet distant, ca va être facile! Naïf que j’étais)