banniere

Le portail francophone de la géomatique


Toujours pas inscrit ? Mot de passe oublié ?
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

Annonce

Rencontres QGIS 2025

L'appel à participation est ouvert jusqu'au 19 janvier 2025!

#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)


Fichier(s) joint(s) :
Pour accéder aux fichiers vous devez vous inscrire.

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

 

Pied de page des forums

Powered by FluxBB