Bagaimana cara mendefinisikan jumlah desimal saat menambahkan bidang baru sebagai ganda ke tabel atribut dengan python di Qgis 2.1?


9

Bagaimana cara mengubah ekspresi untuk menentukan jumlah desimal?

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

Seperti yang saya baca di Dokumentasi QGIS API:

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

Jadi saya coba:

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

Tapi saya mendapatkan kesalahan ini:

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'

Jawaban:


7

Mencoba:

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

Ini adalah koreksi yang menyarankan pesan kesalahan.

Saya menggunakannya di sistem saya untuk menambahkan dua bidang (area dan perimeter) di tabel atribut dari shapefile saya dan itu berfungsi.

Kode terpotong saya

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

Tabel atribut dari shapefile saya:

masukkan deskripsi gambar di sini


terima kasih itu berfungsi dengan baik !! jadi saya kira saya melakukan hal yang sama untuk bilangan bulat sebagai QVariant.Double, "integer", 10 dan string sebagai QVariant.String, "string", 5?
Eleftheria

Integer akan menjadi QVariant.Int . Misalnya: QgsField ('ID', QVariant.Int, len = 4)
BritishSteel
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.