在pageload抛出AttributeError时设置pyqt5的表值



我正在尝试使用helper类和方法在页面加载上设置pyqt5 Qtablewidget项。这是我的代码。

#ui - > UI mainwindow class
#examdetails -> a list of dictionaries (table from database)  
def setExamRecords(self,ui,examDetails):
for rowIndex,exam in enumerate(examDetails):
for colIndex,key in enumerate(exam):
print(exam[key])
item = ui.tableWidget.item(rowIndex, colIndex)
item.setText(str(exam[key]))
return True

但是这个返回错误AttributeError: 'NoneType' object has no attribute 'setText'

是不可能在这样一个单独的类中设置UI元素吗?迁移到单独的helper类的原因主要是为了减少主ui类中的代码阻塞。

空单元格的存在并不意味着它与QTableWidgetItem相关联,因此item()方法返回None。一个可能的解决方案是检查它是否为None,如果是,然后创建QTableWidgetItem并使用setItem()设置它:

def setExamRecords(self, ui, examDetails):
for rowIndex, exam in enumerate(examDetails):
for colIndex, key in enumerate(exam):
print(exam[key])
item = ui.tableWidget.item(rowIndex, colIndex)
if item is None:
item = QTableWidgetItem()
ui.tableWidget.setItem(rowIndex, colIndex, item)
item.setText(str(exam[key]))
return True

另一个可能的解决方案是使用模型,如果每个单元格都与QModelIndex相关联:

def setExamRecords(self, ui, examDetails):
for rowIndex, exam in enumerate(examDetails):
for colIndex, key in enumerate(exam):
index = ui.tableWidget.model().index(rowIndex, colIndex)
ui.tableWidget.model().setData(index, str(exam[key]))
return True

最新更新