I am trying to display field names dynamically inside a widget based on the number of fields in vector layer selected in combo box. When i load a raster inside QGIS TOC and a vector layer, it is raising an error as shown below
AttributeError: 'OpenlayersLayer' object has no attribute 'pendingFields'
Below is my code
def addLayerNames(self):
self.dlg.comboBox.clear()
for i in reversed(range(self.dlg.verticalLayout.count())):
self.dlg.verticalLayout.itemAt(i).widget().setParent(None)
layers = QgsMapLayerRegistry.instance().mapLayers().values()
layer_list = []
for layer in layers:
if layer.type() == QgsMapLayer.VectorLayer:
layer_list.append(layer.name())
self.dlg.comboBox.addItems(layer_list)
selectedLayerIndex = self.dlg.comboBox.currentIndex()
print selectedLayerIndex
selectedLayer = layers[selectedLayerIndex]
print selectedLayer
fields = selectedLayer.pendingFields()
fieldnames = [field.name() for field in fields]
for i,field in enumerate(fieldnames):
self.labels = QLabel()
self.linedit = QLineEdit()
self.labels.setText(field)
#self.flay = QFormLayout()
#self.le = QLineEdit()
self.linedit.setFixedWidth(200)
self.dlg.verticalLayout.addRow(field, self.linedit)
#self.linedit.setFixedWidth(100)
#self.dlg.verticalLayout.addLayout(self.flay)
#self.dlg.verticalLayout.addWidget(self.linedit)
request = QgsFeatureRequest().setFilterFid(0)
layer.setSelectedFeatures([0])
self.iface.actionZoomToSelected().trigger()
feat = layer.getFeatures(request).next()
self.linedit.setText(str(feat[i]))
self.linedit.setObjectName(field)
self.dlg.pushButton.setEnabled(False)
self.lineedits.append(self.linedit)