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 2026

L'appel à participation est ouvert jusqu'au 17 novembre 2025!

#1 Hier 13:11

pyjoubert
Participant assidu
Lieu: Lyon
Date d'inscription: 21 Mar 2006
Messages: 382

QGIS 3.34: Action dans un formulaire --> lecture de champ en python

Bonjour

J'ai un formulaire avec plusieurs champ dont un intitulé "chemin_document" contenant le chemin et nom d'un fichier image.
Dans le code python associé à une action du formulaire, je voudrais relire le champ

Comment faire ?

Merci et bonne journée, PYJ

Hors ligne

 

#2 Hier 15:18

pyjoubert
Participant assidu
Lieu: Lyon
Date d'inscription: 21 Mar 2006
Messages: 382

Re: QGIS 3.34: Action dans un formulaire --> lecture de champ en python

Bon,
j'ai réussi à lire le contenu d'un champ de formulaire d'attribut.
avec

Code:

nom= "[%nomdocument%]"

Maintenant,
1) je cherche à mettre à jour un champ  comment faire?
2) A enregistrer automatiquement le formulaire . Comment faire ?


Merci de vos réponses

PYJ


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

Hors ligne

 

#3 Hier 21:42

arnaudp
Participant actif
Date d'inscription: 20 Sep 2020
Messages: 54

Re: QGIS 3.34: Action dans un formulaire --> lecture de champ en python

Bonjour,

En m'insirant de la réponse suivante https://gis.stackexchange.com/questions … -yes-to-no

J'arrive au script suivant :

Code:

from qgis.utils import iface

layer_id = '[%@layer_id%]'
layer_obj = QgsProject().instance().mapLayer(layer_id)
fid = [%$id%]
fld = layer_obj.fields().lookupField('nomdocument') # Le nom de votre champ
with edit(layer_obj):
    layer_obj.changeAttributeValue(fid, fld, 'Mon Nouveau Nom')# La nouvelle valeur

Je viens de faire un test rapide sur une couche temporaire en mémoire et ça à l'air de bien fonctionner.
Bonne journée.

Dernière modification par arnaudp (Hier 21:42)

Hors ligne

 

#4 Aujourd'hui 09:44

pyjoubert
Participant assidu
Lieu: Lyon
Date d'inscription: 21 Mar 2006
Messages: 382

Re: QGIS 3.34: Action dans un formulaire --> lecture de champ en python

Bonjour,
Le  code proposé fonctionne bien ;-)

Par contre, pour lire la valeur du champ du formulaire, je suis obligé d'enregistrer les modifications avant

Existe t'il un moyen de lire la valeur directement dans le formulaire avant d'enregistrer dans la feature ?


Merci


PYJ

Hors ligne

 

#5 Aujourd'hui 09:48

pyjoubert
Participant assidu
Lieu: Lyon
Date d'inscription: 21 Mar 2006
Messages: 382

Re: QGIS 3.34: Action dans un formulaire --> lecture de champ en python

Pour info, voici le code de mon action

Code:

import shutil
import os
from qgis.utils import iface

layer_id = '[%@layer_id%]'
layer_obj = QgsProject().instance().mapLayer(layer_id)

idobjet = "[%idobjet%]"
source = "[%chemindocument%]"
destination = (r"K:\Projets transversaux\tmp_doc_joint_poc" + "\\"+ idobjet)

# Création du répertoire si néxessaire
if (not os.path.exists(destination)):
   os.mkdir(destination)
   
# Déplacement du fichier
dest = shutil.move(source, destination)

fid = [%$id%]
fld = layer_obj.fields().lookupField('chemindocument') # Le nom de votre champ

layer_obj.startEditing()
layer_obj.changeAttributeValue(fid, fld, dest)
layer_obj.commitChanges()

Hors ligne

 

#6 Aujourd'hui 10:00

pyjoubert
Participant assidu
Lieu: Lyon
Date d'inscription: 21 Mar 2006
Messages: 382

Re: QGIS 3.34: Action dans un formulaire --> lecture de champ en python

Question subsidiaire

Existe t'il un moyen d'associer cette action non pas à un bouton créé par l'action même, mais au bouton "enregistrer" du formulaire

Merci


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

Hors ligne

 

#7 Aujourd'hui 13:31

pyjoubert
Participant assidu
Lieu: Lyon
Date d'inscription: 21 Mar 2006
Messages: 382

Re: QGIS 3.34: Action dans un formulaire --> lecture de champ en python

J'avance et je suis en phase de finalisation

Dans le formulaire, j'ai suprimé le bouton "Parcourir" pour le choix du fichier
Et j'ai placé le choix du fichier dans le code python de mon action

Tout fonctionne comme je le voulais

Le déplacement du fichier se fait et le nouveau path est stocké en base


Reste plus qu'à rafraichir le formulaire
Actuellement je passe de l'ongle information à l'onglet Pièce jointe et le formulaire est à jour, mais je voudrais faire cela automatiquement dans mon code Python

Une idée ?
Et après, je ne vous demande plus rien à ce sujet ;-))

Merci une dernière fois

PYJ

Hors ligne

 

Pied de page des forums

Copyright Association GeoRezo