如何解决在页面加载中在 pyqt5 上设置表值会引发 AttributeError
我正在尝试使用辅助类和方法在页面加载上设置 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 元素吗?迁移到单独的辅助类的原因主要是为了减少在主 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,key in enumerate(exam):
index = ui.tableWidget.model().index(rowIndex,colIndex)
ui.tableWidget.model().setData(index,str(exam[key]))
return True
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。