如何将QTableWidget中的数据打印到另一个QTableWidget中?
问题原因排查
你遇到的AttributeError: 'NoneType' object has no attribute 'setText'报错来自两个核心问题:
- Qt的
QTableWidgetItem不能直接跨窗口/跨控件复用,你把主窗口表格里的topcu对象直接setItem到结果窗口表格的操作是无效的,会导致结果窗口表格对应位置实际没有有效item,调用item()方法就返回None。 - 结果窗口表格的第二列你没有先创建
QTableWidgetItem就直接调用item()获取对象,返回的也是None。
修复方案
直接替换hesapla方法里最后两段for循环的代码,修改为如下逻辑即可:
# 写入姓名和计算结果到结果窗口表格 for i in range(self.ui.tableWidget.rowCount()): # 读取主窗口的球员姓名 topcu = self.ui.tableWidget.item(i, 0) topcu_isim = topcu.text() # 新建QTableWidgetItem给结果窗口的姓名列,不能直接复用主窗口的item isim_item = QTableWidgetItem(topcu_isim) # 结果窗口只读的话可以设置item不可编辑 isim_item.setFlags(isim_item.flags() & ~Qt.ItemIsEditable) self.topsis_sonuc.ui_snc.tableWidget_sonuc.setItem(i, 0, isim_item) # 处理计算结果列 sonuc_degeri = str(round(yakinlik_katsayilari[i], 4)) sonuc_item = QTableWidgetItem(sonuc_degeri) sonuc_item.setFlags(sonuc_item.flags() & ~Qt.ItemIsEditable) self.topsis_sonuc.ui_snc.tableWidget_sonuc.setItem(i, 1, sonuc_item)
注意要提前导入Qt的常量:from PyQt5.QtCore import Qt,如果使用的是PyQt6对应调整导入路径即可。
展示控件优化建议
因为你的结果窗口只需要展示数据不需要交互,相比QTableWidget更推荐用QTableView结合QStandardItemModel,逻辑更清晰,渲染性能也更好;如果是非常简单的两列固定展示,用QListWidget加自定义item也可以满足需求。
内容的提问来源于stack exchange,提问作者themlc
相关产品推荐
相关产品推荐

