#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