Таблица атрибутов QgsVectorLayer не обновляется при добавлении нового QgsFeature - PullRequest
0 голосов
/ 26 июня 2019

При добавлении новой QgsFeature в существующую функцию QgsVectorLayer атрибуты не добавляются.

Я хочу добавить новый QgsFeature (многоугольник) к уже существующему QgsVectorLayer. Элемент добавляется на холст (он отображается на экране), но соответствующая таблица атрибутов слоя не обновляется (атрибуты вновь созданного объекта не добавляются)

Я прочитал PyQGIS Cookbook и соответствующие вопросы StackOverflow, но код не работает, и я не знаю, что мне не хватает.

layer = self.projectInstance.mapLayersByName('draba_obcina')[0]
pr = layer.dataProvider() 
points = [QgsPointXY(0, 0), QgsPointXY(0, 1), QgsPointXY(1, 0), QgsPointXY(0, 0)]

poly = QgsFeature(layer.fields())
#if i set OGC_FID i get SQLite error: UNIQUE constraint failed (although there is no entry with OGC_FID = 3640)
#poly.setAttribute ("OGC_FID", 3640)
poly.setAttribute ("tip_spr", None)
poly.setAttribute ("id", None)
poly.setAttribute ("sif_upr", None)
poly.setAttribute ("id_upr", None)
poly.setAttribute ("vrsta_dr", None)
poly.setAttribute ("vrsta_pov", None)
poly.setAttribute ("nac_dol", None)
poly.setAttribute ("nat_dol", None)
poly.setAttribute ("usklajenost_zk", None)
poly.setAttribute ("graf_pov", None)
poly.setAttribute ("d_spr", None)
poly.setAttribute ("d_vir", None)
poly.setAttribute ("vrsta_el", None)
poly.setAttribute ("opis", "I was created by plugin")
poly.setAttribute ("createdtime", "2019-06-25 18:51:34")
poly.setAttribute ("kat", "10")

poly.setGeometry(QgsGeometry.fromPolygonXY([points]))

res, outFeats = pr.addFeatures([poly])

layer.updateExtents()
layer.commitChanges()
layer.reload() 

pr.addFeatures ([poly]) возвращает (res == True), а (длина outFeats равна 1) что для меня означает, что добавление функции прошло успешно.

Ошибок нет.

Но новая функция отображается только на холсте, и в таблицу атрибутов атрибут не добавляется.

1 Ответ

0 голосов
/ 26 июня 2019

Решил мою проблему, код работает нормально, но проблема была в том, что мне пришлось перезагрузить пользовательский интерфейс таблицы атрибутов , чтобы в нем появились новые атрибуты.

...