#1 Thu 26 August 2021 17:15
- Lisa_M
- Juste Inscrit !
- Date d'inscription: 25 Jun 2021
- Messages: 3
QGIS: plugin selection attributaire
Bonjour,
je suis en train de programmer un plugin pour me permettre d'interroger facilement les données d'une couche en fonction de leur attribut.
J'ai créer mon formulaire avec QT Designer. Dans celle-ci j'ai des checkbox. Une checkbox = un attribut d'un champ
Lorsque je coche / décoche ces checkbox, j'aimerais que les entités correspondantes soient toutes sélectionnées.
Avec le code que j'ai écrit, lorsque je coche une seule checkbox, la sélection fonctionne sur l'attribut correspondant. Mais lorsque j'en coche plusieurs pour sélectionner plusieurs attributs, cela ne fonctionne pas (la sélection ne se fait que selon un attribut).
J'ai mis en pièce jointe, le formulaire et mon code. Comment puis-je l'adapter pour que mes fonctions "selection_choix1", ""selection_choix2" et "selection_choix3" fonctionnent simultanément et donc que je puisse sélectionner mes données selon plusieurs attributs ?
Merci d'avance
Dernière modification par Lisa_M (Thu 26 August 2021 17:15)
Hors ligne
#2 Fri 27 August 2021 10:39
- JD
- Moderateur
- Date d'inscription: 8 Aug 2013
- Messages: 726
Re: QGIS: plugin selection attributaire
Bonjour,
il faut construire le filtre en vérifiant tous les boîtes à cocher et ensuite faire la selection avec ce filtre.
Code:
choix1 = True choix2 = False choix3 = True choix = [] if choix1 : choix.append("'CHOIX1'") if choix2: choix.append("'CHOIX2'") if choix3: choix.append("'CHOIX3'") print(choix) filtre_choix = ','.join(choix) print(filtre_choix) filtre = f'"type_choix" IN ({filtre_choix})' print(filtre) #layer.selectByExpression(filtre)
Hors ligne
#3 Fri 27 August 2021 17:30
- Lisa_M
- Juste Inscrit !
- Date d'inscription: 25 Jun 2021
- Messages: 3
Re: QGIS: plugin selection attributaire
Merci beaucoup ça a marché comme ça !
Cela sélectionne bien l'ensemble de mes données lorsque je coche les Checkbox correspondantes.
Maintenant, j'aimerais pouvoir sélectionner les attributs de différents champs. Il me semble donc que je dois créer plusieurs filtres, un pour chaque champs, en suivant la même construction ? Lorsque j'appuie sur mon bouton sélection, j'aimerai donc appliquer "filtre 1" ET "filtre 2" ET "filtre 3" etc.
Cependant, en faisant comme ça, je n'arrive pas à appliquer tous mes filtres en même temps au moment d'appuyer sur sélection. J'ai essayé diverses syntaxes -à commencer bêtement par : layer.selectByExpression(filtre1 and filtre2), ou en écrivant 2 fois la commande avec filtre1 puis filtre 2 - mais soit un seul filtre s'applique soit aucun.
Auriez-vous une solution ?
UPDATE :
J'ai réussis en faisant :
filtre_choix1 = ','.join(choix1)
filtre_choix2 = ','.join(choix2)
filtre = f'"type_choix1" IN ({filtre_choix1}) and "type_choix2" IN ({filtre_choix2})'
layer.selectByExpression(filtre)
Sauf que cette fois, si je ne coche pas au moins une checkbox de chacun de mes 2 filtres, la sélection ne s'applique pas > je dois obligatoirement cocher au moins une checkbox de mon filtre_choix 1 et une de mon filtre_choix2 pour que cela marche.
Comment faire si je ne veux sélectionner que des checkbox de mon filtre_choix1 par exemple ?
UPDATE 2 :
Finalement j'ai peut-être trouvé une solution en rajoutant une condition disant que si mes boites sont décochées, alors je sélectionne tout (par défaut si je ne coche rien tout sera donc sélectionné)
if choix1 == False and choix 2 == False :
choix1.append("'CHOIX1'")
choix2.append("'CHOIX2'")
et j'ai fais ça pour chacun de mes filtres.
Dernière modification par Lisa_M (Mon 30 August 2021 10:54)
Hors ligne