在页面加载抛出 AttributeError 时在 pyqt5 上设置 table 值
Set table values on pyqt5 in pageload throws AttributeError
我正在尝试使用助手 class 和方法在页面加载时设置 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
然而这个returns错误AttributeError: 'NoneType' object has no attribute 'setText'
难道不能像这样在单独的 class 中设置 ui 元素吗?移动到单独的助手 class 的原因主要是为了减少主 ui class.
中的代码堵塞
空单元格的存在并不意味着它与 QTableWidgetItem 相关联,因此 item() 方法 returns 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
我正在尝试使用助手 class 和方法在页面加载时设置 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
然而这个returns错误AttributeError: 'NoneType' object has no attribute 'setText'
难道不能像这样在单独的 class 中设置 ui 元素吗?移动到单独的助手 class 的原因主要是为了减少主 ui class.
中的代码堵塞空单元格的存在并不意味着它与 QTableWidgetItem 相关联,因此 item() 方法 returns 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