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

Les inscriptions sont ouvertes !

#1 Thu 27 March 2025 23:08

Marcopololo
Participant actif
Date d'inscription: 23 Nov 2021
Messages: 68

QGIS: programme python affichage champ attribut sur clic

Bonjour,

En prenant comme exemple un tuto j'essaie d'afficher dans un champ type QLineEdit la valeur d'un champ de la couche active, en lien avec un click.

Code:

ef display_point(self, point, button):
        # Affiche les coordonnées du clic

        self.dlg.hide()  # cache la boite de dialogue
        coords = "{:.3f}, {:.3f}".format(point.x(), point.y())  ## formatage des coordonnées
        self.dlg.lineEdit.setText(coords)  # affichage des coordonnées
        self.dlg.NumParc.setText(coord2)  # affichage des infos du champ de la couche active
        self.dlg.LineTest.append("Test")
        self.dlg.show()  # affiche de nouveau la boite de dialogue

J'ai un code qui semble convenir mais mes compétences en python sont celles d'un débutant et j'ai du mal à insérer le code suivant à la place de la ligne ou se trouve NumParc. Le champ de la table attributaire que je veux afficher s'appelle  id

Code:

layer = iface.activeLayer()
layer.feature[id]

J'espère avoir été assez clair.
Merci de votre aide, Marcopololo

Hors ligne

 

#2 Sun 30 March 2025 18:04

Marcopololo
Participant actif
Date d'inscription: 23 Nov 2021
Messages: 68

Re: QGIS: programme python affichage champ attribut sur clic

Bonjour,

Je suis arrivé à afficher l'attribut d'un champ de ma couche "parcelles moyenmoutier".
Et j'ai plusieurs questions.
1. J'aurais aimé plutôt que de définir une couche précise, que le code s'applique à la couche active mais lorsque j’utilise

Code:

activeLayer()

cela ne fonctionne pas j'ai une erreur QgsProject' object has no attribute 'activeLayer'. a priori si j'ai bien compris c'est parce que activeLayer dépend de la class QgisInterface ?
2. J'ai tenté d'utilisé self.iface pour que se soit le id de la zone cliquée qui s'affiche et non pas le premier champ de la table ? Faut il rajouter un paramètre
dans def display_point ?

Merci d'avance de votre aide

Marcopololo

Code:

 def display_point(self, point, button):
        # Affiche les coordonnées du clic

        self.dlg.hide()  # cache la boite de dialogue
        coords = "{:.3f}, {:.3f}".format(point.x(), point.y())  ## formatage des coordonnées
        #coord2 = "{:.4f}, {:.4f}".format(point.x(), point.y())  ## formatage des coordonnées
        layer = self.iface.activeLayer()
        projet = QgsProject.instance()
        couches = projet.mapLayers()
        couchePAR = projet.mapLayersByName("parcelles moyenmoutier")[0]
        enregistrements = couchePAR.getFeatures()
        e = next(couchePAR.getFeatures())
        numP = e.attributes()[1]
        self.dlg.lineEdit.setText(coords)  # affichage des coordonnées
        self.dlg.NumParc.setText(numP)  # affichage id parcelle
        self.dlg.LineTest.append("Test")
        self.dlg.show()  # affiche de nouveau la boite de dialogue

Hors ligne

 

#3 Hier 12:02

Marcopololo
Participant actif
Date d'inscription: 23 Nov 2021
Messages: 68

Re: QGIS: programme python affichage champ attribut sur clic

Bonjour,
Après de multiples recherches et d'un début apprentissage de python, j'ai enfin trouvé ce que je cherchais. Il me restera à récupérer les coordonnées sur un click. Par contre j'ai tout de même un soucis dans les tests effectués en console python. Ma couche pointDemo se créé bien ainsi que mon champ, mais la condition if avec within ne donne aucun résultat ? Es ce que cela peut être lié au type de couche geopackage ? J'ai testé avant d'utiliser la condition if et j'ai bien toute la liste de mes valeurs ?
J'ai essayé avec intersecs, contains et c'est j'ai le même soucis

Code:

projet = QgsProject.instance()
coucheParcelles = projet.mapLayersByName("parcelles moyenmoutier")[0]
entites = coucheParcelles.getFeatures()

#création point en mémoire
layer = QgsVectorLayer('Point?crs=epsg:4326&field=id:integer','pointDemo','memory')
pr = layer.dataProvider()
pointParc = QgsFeature()
pointParc.setGeometry(QgsGeometry.fromPointXY(QgsPointXY(48.3815098,6.9509046)))
pr.addFeatures([pointParc])
layer.updateExtents()
projet.addMapLayers([layer])
print(layer.sourceCrs())

#Recherche champ ou se trouve mon point
for e in entites:
    if pointParc.geometry().within(e.geometry()):
        print(e.attributes()[1])

Dernière modification par Marcopololo (Hier 12:04)

Hors ligne

 

#4 Hier 16:06

Marcopololo
Participant actif
Date d'inscription: 23 Nov 2021
Messages: 68

Re: QGIS: programme python affichage champ attribut sur clic

Bon, j'ai trouvé l'erreur, j'ai inversé les coordonnées X et Y.
Ca fonctionne. Maintenant reste à intégrer cela avec un click reccherche coordonnées

Hors ligne

 

#5 Hier 23:34

Marcopololo
Participant actif
Date d'inscription: 23 Nov 2021
Messages: 68

Re: QGIS: programme python affichage champ attribut sur clic

Je continue avec mes questions. J'ai réussi à créer une première partie dans laquelle je récupère les coordonnées x et y que j'affiche dans un champ et la seconde partie ci dessus.
Quel code me permettrait de réinjecter ces coordonnées sur click dans la ligne ci dessous à la place des coordonnées statiques ?
Elles sont sous la forme suivante :

Code:

    def display_point(self, point, button):
        # Affiche les coordonnées du clic

        self.dlg.hide()  # cache la boite de dialogue
        coords = "{}, {}".format(point.x(), point.y())  ## formatage des coordonnées

Code partie coordonnées statiques :

Code:

pointParc.setGeometry(QgsGeometry.fromPointXY(QgsPointXY(48.3815098,6.9509046)))

Merci d'avance de votre aide

Hors ligne

 

#6 Aujourd'hui 07:26

Benoit D
Participant assidu
Date d'inscription: 17 Jul 2018
Messages: 156

Re: QGIS: programme python affichage champ attribut sur clic

Ne vous découragez pas si vous n’avez pas de réponse c’est peut-être un peu loin de nos expériences ou dans une période où les uns et les autres ne disposent peut-on pas de temps. et merci de nous faire partager votre cheminement.
En espérant que vous trouverez.

Je ne suis pas sûr d’avoir compris. Vous voulez utiliser les coordonnées cliquées pour les enregistrer dans votre couche d’entités ? Avez-vous essayé

Code:

 pointParc.setGeometry(QgsGeometry.fromPointXY(QgsPointXY(point.x(),point.y())))

Hors ligne

 

#7 Aujourd'hui 08:42

Marcopololo
Participant actif
Date d'inscription: 23 Nov 2021
Messages: 68

Re: QGIS: programme python affichage champ attribut sur clic

Bonjour,
Merci de votre réponse. J'avance tout doucement et ce n'est pas en me mâchant tout le travail que je vais comprendre.
en fait je souhaite réutiliser les coordonnées cliquées pour afficher la valeur du champ id de ma parcelle. Pour l'instant je n'y arrive qu'en mettant une coordonnées statique.
Je cherche une fonction qui me permettrait de remplacer les coordonnées fixes dans mon code par une fonction. Peut-être aspoint ?

Hors ligne

 

#8 Aujourd'hui 11:46

Marcopololo
Participant actif
Date d'inscription: 23 Nov 2021
Messages: 68

Re: QGIS: programme python affichage champ attribut sur clic

Je suis arrivé en utilisant dans la console

Code:

print(pointParc.geometry().asPoint())

à afficher les coordonnées, mais je n'arrive pas à l'écrire dans un QLineEdit d'e ma boite de dialogue ?
Merci de votre aide

Hors ligne

 

Pied de page des forums

Copyright Association GeoRezo