Suite

Définir le paramètre Python Toolbox sur Aucun sans rendre la valeur de sélection actuelle non sélectionnable par la suite ?

Définir le paramètre Python Toolbox sur Aucun sans rendre la valeur de sélection actuelle non sélectionnable par la suite ?


Je crée une boîte à outils python et elle a un paramètre d'entrée de type GPFeatureLayer. Appelons-lemon_param.

DansupdateParamètreslorsquemy_param.altered, sa valeur est ajoutée à une table de valeurs. Ensuite, je voudrais définirmy_param.value = Aucun, de sorte que la sélection soit supprimée et que la même valeur puisse être immédiatement sélectionnée à nouveau.

Dans l'état actuel des choses, la misemy_param.value = Aucunsignifie que cette couche ne peut pas être choisie à nouveau.

Pourquoi cela se produit-il et comment puis-je réaliser ce que j'essaie de faire ?

Voici un exemple de code à utiliser :

def getParameterInfo(self): my_param = Parameter(displayName='My Param', name="my_param", datatype="GPFeatureLayer", parameterType="Optional", direction="Input") return [my_param] def updateParameters(self, parameters): my_param = parameters[0] if my_param.altered: (fonction qui ajoute my_param.value à une autre table, sans importance pour ce problème) my_param.value = None return

En plus de vérifier lealtéréflag J'évaluerais également la valeur du paramètre. Vous pourriez utiliservalueAsTextou alorsvaleur, maisvalueAsTextest légèrement plus rapide (surtout si vous travaillez avec un calque).

def updateParameters(self, parameters): my_param = parameters[0] if my_param.altered et my_param.valueAsText: #(fonction qui ajoute my_param.value à une autre table, pas important pour ce problème) my_param.value ="return

Désormais, la valeur du paramètre ne sera réinitialisée que si le paramètre a été modifié et n'est pas vide.


J'ai compris comment y faire face. Ce n'est pas une solution parfaite mais ça marche. Définissez le paramètre datatype = 'GPString' au lieu de 'GPFeatureLayer', puis lorsque vous souhaitez l'effacer en définissant la valeur =", vous devez alors réinitialiser my_param.filter.list = [(option1), (option2),… ]. Donc, écrivez une méthode qui renvoie toutes les options souhaitées dans une liste de chaînes sur laquelle vous pouvez définir my_param.filter.list. Par exemple, voici ma méthode qui renvoie tous les noms de couches d'entités ponctuelles de la carte :

def point_feature_layer_names(self): point_layer_names = [] mxd = MapDocument('CURRENT') df = mxd.activeDataFrame pour lyr dans ListLayers(mxd,", df): desc = Describe(lyr.name) if desc.shapeType == ' Point': point_layer_names.append(lyr.name) del mxd return point_layer_names