Comment remplir automatiquement les champs instantanément?


11

Je cherche à créer une table d'attributs où le premier champ est un menu déroulant (j'ai atteint cet objectif en utilisant le widget d'édition 'value map'), mais j'ai du mal à trouver une méthode pour la partie suivante;

Une fois la valeur sélectionnée dans le menu déroulant, je souhaite que la cellule adjacente (dans le champ suivant) soit automatiquement remplie en fonction de la valeur du menu déroulant. Ainsi, par exemple; si valeur déroulante = A, alors champ adjacent = 1. Ou si valeur déroulante = B, alors valeur champ adjacent = 3, etc.

Je me rends compte qu'en utilisant la calculatrice de champs, il est possible de remplir automatiquement les champs dans le cadre d'un processus séparé, mais je voudrais que les champs soient remplis en même temps que la valeur déroulante est sélectionnée si possible.

J'utilise Windows 7 et QGIS version 1.8.

Merci beaucoup.

Réponses:


9

Vous aurez besoin d'un peu de python pour ce faire.

Vous pouvez lire ce très bel article de blog ici

Créez un script similaire au suivant appelé FillForm.py et placez-le à côté de votre projet

from PyQt4.QtCore import *
from PyQt4.QtGui import *

aField = None
bField = None

def formOpen(dialog,layerid,featureid):
    global aField
    aField = dialog.findChild(QComboBox,"fieldA")
    global bField
    bField = dialog.findChild(QLineEdit,"fieldB")
    aField.currentIndexChanged.connect( aChanged )

def aChanged( value ):
    if ( aField.currentText() == 'A' )
        bField.setText( '1' )
    elif ( aField.currentText() == 'B' )
        bField.setText( '2' )

Accédez à Propriétés de la couche vectorielle => Général et entrez FormFill.formOpen dans la ligne de fonction d'initialisation .


Est-il possible de le faire dans qgis 2.10? Y a-t-il de nombreuses différences de 1,8?
Diogo Caribé

oui c'est toujours possible
Ian Turton
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.