1 votos

QTableWidget hoizontalHeaderItem devuelve None

Estoy desarrollando una herramienta es Qgis3 usando PyQt5. Estoy añadiendo columnas utilizando un botón y el establecimiento de nombres de columna utilizando 'setHorizontalHeaderItem'. Pero da Ninguno al intentar leerlo. El siguiente es el código.

    count=self.dlg.tableWidget.columnCount()
    self.dlg.tableWidget.setColumnCount(count+1)
    header= QTableWidgetItem(str(count+1))
    self.dlg.tableWidget.setHorizontalHeaderItem(count+1,header)
    self.dlg.lineEdit_4.setText(self.dlg.tableWidget.horizontalHeaderItem(count+1).text())

da un error- 'AttributeError: 'NoneType' object has no attribute 'text' ' No puedo identificar el error.

1voto

Jeremy White Puntos 381

Pruebe a cambiar las 2 líneas siguientes, pasando count como índice de columna en lugar de count+1 : Ej.

self.dlg.tableWidget.setHorizontalHeaderItem(count,header)
self.dlg.lineEdit_4.setText(self.dlg.tableWidget.horizontalHeaderItem(count).text())

Porque al obtener el recuento de columnas, si la tabla tiene, por ejemplo, 3 columnas, el índice de la última columna sería 2 (ya que la indexación comienza en 0). Después de añadir otra columna, el índice de la nueva columna será 3, que es el valor original del recuento.

Puede verlo en este ejemplo mínimo:

tw = QTableWidget(3, 3)
items = [['r1c1', 'r1c2', 'r1c3'],
         ['r2c1', 'r2c2', 'r2c3'],
         ['r3c1', 'r3c2', 'r3c3']]

row = 0
for item in items:
    col = 0
    for cell in item:
        tw.setItem(row, col, QTableWidgetItem(items[row][col]))
        col += 1
    row+=1

for i in range(tw.columnCount()):
    tw.setHorizontalHeaderItem(i, QTableWidgetItem(f'Column {i+1}'))

count = tw.columnCount()
tw.setColumnCount(count+1)
header= QTableWidgetItem(f'Column {count+1}')
tw.setHorizontalHeaderItem(count, header)

tw.show()

print(count)
print(tw.horizontalHeaderItem(count).text())

Cuando se ejecuta en la consola Python de QGIS, el resultado es:

enter image description here

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X