Como definir o número de casas decimais ao adicionar um novo campo como duplo a uma tabela de atributos com python no Qgis 2.1?

9

Como alterar a expressão para definir o número de casas decimais?

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

Como li na documentação da 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

Então eu tento:

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

Mas eu recebo este erro:

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
fonte

Respostas:

7

Tentar:

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

Essa é a correção que sugere a mensagem de erro.

Usei-o no meu sistema para adicionar dois campos (área e perímetro) na tabela de atributos do meu shapefile e ele funciona.

Meu código cortado

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

A tabela de atributos do meu shapefile:

insira a descrição da imagem aqui

xunilk
fonte
obrigado funciona bem !! então suponho que faça o mesmo para números inteiros como QVariant.Double, "integer", 10 e strings como QVariant.String, "string", 5?
Eleftheria
Os números inteiros seriam QVariant.Int . Por exemplo: QgsField ('ID', QVariant.Int, len = 4)
BritishSteel