¿Cómo definir el número de decimales al agregar un nuevo campo como doble a una tabla de atributos con python en Qgis 2.1?

9

¿Cómo cambiar la expresión para definir el número de decimales?

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

Como leí en la documentación de la API de 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

Entonces intento:

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

Pero me sale este error:

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
fuente

Respuestas:

7

Tratar:

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

Esta es la corrección que sugiere el mensaje de error.

Lo utilicé en mi sistema para agregar dos campos (área y perímetro) en la tabla de atributos de mi shapefile y funciona.

Mi código cortado

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

La tabla de atributos de mi shapefile:

ingrese la descripción de la imagen aquí

xunilk
fuente
gracias funciona bien !! así que supongo que hago lo mismo para los enteros que QVariant.Double, "integer", 10 y cadenas como QVariant.String, "string", 5?
Eleftheria
Los enteros serían QVariant.Int . Por ejemplo: QgsField ('ID', QVariant.Int, len = 4)
BritishSteel