Comment définir le nombre de décimales lors de l'ajout d'un nouveau champ comme double à une table attributaire avec python dans Qgis 2.1?

9

Comment changer l'expression pour définir le nombre de décimales?

layer.dataProvider().addAttributes([QgsField("fieldname",  QVariant.Double)])

Comme je l'ai lu dans la documentation de l'API QGIS:

Parameters
        name Field name
        type Field variant type, currently supported: String / Int / Double
    typeName Field type (eg. char, varchar, text, int, serial, double). 

         len Field length
        prec Field precision

J'essaye donc:

layer.dataProvider().addAttributes([QgsField("fieldname",  QVariant.Double, 10, 3)])

Mais je reçois cette erreur:

TypeError: arguments did not match any overloaded call:

QgsField(QString name=QString(), Type type=QVariant.Invalid, QString   
typeName=QString(), int len=0, int prec=0, QString comment=QString()): 
argument 3 has unexpected type 'int'

QgsField(QgsField): argument 1 has unexpected type 'str'
Eleftheria
la source

Réponses:

7

Essayer:

layer.dataProvider().addAttributes([QgsField("fieldname",  QVariant.Double, "double", 10, 3)])

Il s'agit de la correction qui suggère le message d'erreur.

Je l'ai utilisé dans mon système pour ajouter deux champs (surface et périmètre) dans la table des attributs de mon fichier de formes et cela fonctionne.

Mon code coupé

.
.
.
    fields = [ QgsField('area', QVariant.Double, 'double', 20, 2), 
               QgsField('perimeter', QVariant.Double, 'double', 10, 3) ]
.
.
.

La table des attributs de mon shapefile:

entrez la description de l'image ici

xunilk
la source
merci ça marche bien !! donc je suppose que je fais la même chose pour les entiers comme QVariant.Double, "integer", 10 et les chaînes comme QVariant.String, "string", 5?
Eleftheria
Les entiers seraient QVariant.Int . Par exemple: QgsField ('ID', QVariant.Int, len = 4)
BritishSteel