微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在页面加载中在 pyqt5 上设置表值会引发 AttributeError

如何解决在页面加载中在 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 举报,一经查实,本站将立刻删除。