Pages: 1
- Sujet précédent - QGIS 3.34: Action dans un formulaire --> lecture de champ en python - Sujet suivant
#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
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
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
Pages: 1
- Sujet précédent - QGIS 3.34: Action dans un formulaire --> lecture de champ en python - Sujet suivant