Wie definiere ich die Anzahl der Dezimalstellen, wenn ich ein neues Feld als Double zu einer Attributtabelle mit Python in Qgis 2.1 hinzufüge?


9

Wie ändere ich den Ausdruck, um die Anzahl der Dezimalstellen zu definieren?

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

Wie ich in der QGIS API-Dokumentation gelesen habe:

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

Also versuche ich:

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

Aber ich bekomme diesen Fehler:

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'

Antworten:


7

Versuchen:

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

Dies ist die Korrektur, die die Fehlermeldung vorschlägt.

Ich habe es in meinem System verwendet, um zwei Felder (Fläche und Umfang) in die Attributtabelle meines Shapefiles einzufügen, und es funktioniert.

Mein abgeschnittener Code

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

Die Attributtabelle meines Shapefiles:

Geben Sie hier die Bildbeschreibung ein


danke es funktioniert gut !! Ich nehme an, ich mache dasselbe für ganze Zahlen wie QVariant.Double, "integer", 10 und Strings als QVariant.String, "string", 5?
Eleftheria

Ganzzahlen wären QVariant.Int . Zum Beispiel: QgsField ('ID', QVariant.Int, len = 4)
BritishSteel
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.