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 !