#1 Thu 27 March 2025 23:08
- Marcopololo
- Participant actif
- Date d'inscription: 23 Nov 2021
- Messages: 70
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: 70
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 Mon 31 March 2025 12:02
- Marcopololo
- Participant actif
- Date d'inscription: 23 Nov 2021
- Messages: 70
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 (Mon 31 March 2025 12:04)
Hors ligne
#4 Mon 31 March 2025 16:06
- Marcopololo
- Participant actif
- Date d'inscription: 23 Nov 2021
- Messages: 70
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 Mon 31 March 2025 23:34
- Marcopololo
- Participant actif
- Date d'inscription: 23 Nov 2021
- Messages: 70
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 Tue 01 April 2025 07:26
- Benoit D
- Participant assidu
- Date d'inscription: 17 Jul 2018
- Messages: 158
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 Tue 01 April 2025 08:42
- Marcopololo
- Participant actif
- Date d'inscription: 23 Nov 2021
- Messages: 70
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 Tue 01 April 2025 11:46
- Marcopololo
- Participant actif
- Date d'inscription: 23 Nov 2021
- Messages: 70
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
#9 Aujourd'hui 09:28
- Marcopololo
- Participant actif
- Date d'inscription: 23 Nov 2021
- Messages: 70
Re: QGIS: programme python affichage champ attribut sur clic
Je pense que je me rapproche de la solution (avec de nombreuses approximations de codage, mais je ne vois pas comment rendre lisible mes coordonnées, j'ai une erreur "AttributeError: 'QgsPointXY' object has no attribute 'setGeometry"
Code:
class CoordClick: """QGIS Plugin Implementation.""" def display_point(self, point, button): # Affiche les coordonnées du clic #Instances recherche id parcelle projet = QgsProject.instance() coucheParcelles = projet.mapLayersByName("parcelles moyenmoutier")[0] entites = coucheParcelles.getFeatures() self.dlg.hide() # cache la boite de dialogue coords = "{}, {}".format(point.x(), point.y()) ## formatage des coordonnées pc = QgsGeometry.fromPointXY(QgsPointXY(point.x(), point.y())) point.setGeometry(pc) # Affichage point et numéro parcelle correpondante self.dlg.coordClick.setText(coords) # affichage des coordonnées dans la boite de dialogue print(coords) #Recherche id parcelle correspondant aux coordonnées for e in entites: if point.geometry().within(e.geometry()): print(e.attributes()[1]) # affiche l'attribut id self.dlg.show() # affiche de nouveau la boite de dialogue
Pourtant si je remplace par une coordonnée statique cela fonctionne :
Code:
point.setGeometry(QgsGeometry.fromPointXY(QgsPointXY(6.9509046,48.3815098)))
Dernière modification par Marcopololo (Aujourd'hui 09:32)
Hors ligne
#10 Aujourd'hui 10:27
- Gabi63
- Juste Inscrit !
- Date d'inscription: 3 Apr 2016
- Messages: 8
Re: QGIS: programme python affichage champ attribut sur clic
Bonjour,
Je ne suis pas sur de comprendre ce que vous voulez.
De ce que je comprends vous voulez :
- Cliquer sur une géométrie de la couche active dans le canvas ;
- Que le champ id de la géométrie s'affiche dans un bandeau ou dans une fenêtre pop-up ?
Ou vous voulez éditer un champ de manière interactive lorsque vous cliquez sur une entité ?
Cordialement.
Hors ligne
#11 Aujourd'hui 11:32
- Marcopololo
- Participant actif
- Date d'inscription: 23 Nov 2021
- Messages: 70
Re: QGIS: programme python affichage champ attribut sur clic
Bonjour,
Lorsque je clique sur une zone géométrique je souhaite récupérer le champ id associé à ma couche active et l'afficher dans ma boite de dialogue où j'ai déjà affiché mes coordonnées.
Marcopololo
Hors ligne