Pyqt5 QTableItem всегда возвращает None
Я пытаюсь создать таблицу для матрицы инцидентности, чтобы затем выгружать из неё данные и строить граф, однако, когда я пытаюсь понять, есть ли в ячейке единица, то почему-то для первого значения возвращается 1, а для остальных None.
def color_graph(self):
model = self.tblMatrix.model()
graph = []
print(model.columnCount(), model.rowCount())
for i in range(1, model.columnCount()):
graph.append([])
for j in range(1, model.rowCount()):
index = model.index(i, j)
print(i, j, model.data(index))
graph[i-1].append(str(model.data(index)))
Непонятно, почему он так себя ведёт. Код выше выполняется при нажатии на кнопку.
На картинке пример вывода массива graph и сама форма с таблицей. У меня также есть подозрение, что это может быть связано с частотой обновления таблицы, но не понятно почему. Как исправить данную ситуацию?
Ответы (1 шт):
Автор решения: gil9red
→ Ссылка
У вас перепутаны индексы строк (row) и столбцов (column), правильно так:
print(model.rowCount(), model.columnCount())
for i in range(1, model.rowCount()):
graph.append([])
for j in range(1, model.columnCount()):
...
Пример:
from PyQt5.QtWidgets import QApplication, QTableWidget, QTableWidgetItem
app = QApplication([])
table = QTableWidget()
table.setColumnCount(2)
table.setRowCount(4)
table.setItem(0, 0, QTableWidgetItem(''))
table.setItem(1, 0, QTableWidgetItem('v1'))
table.setItem(2, 0, QTableWidgetItem('v2'))
table.setItem(3, 0, QTableWidgetItem('v3'))
table.setItem(0, 1, QTableWidgetItem('e1'))
table.setItem(1, 1, QTableWidgetItem('1'))
table.setItem(2, 1, QTableWidgetItem('2'))
table.setItem(3, 1, QTableWidgetItem('3'))
model = table.model()
print(model.rowCount(), model.columnCount())
for i in range(1, model.rowCount()):
for j in range(1, model.columnCount()):
index = model.index(i, j)
print(f'{i}x{j}: {model.data(index)}')
table.show()
app.exec()
Вывод:
4 2
1x1: 1
2x1: 2
3x1: 3