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'

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


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
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.