PyQt5中QTableWidget.setItem()调用报错,与文档不符问题
问题描述
尝试向QTableWidget的指定单元格写入内容时,多次调用setItem均触发TypeError:
- 调用
self.tblLieferboxen.setItem(0,0,'foo'),报错:TypeError: setItem(self, int, int, QTableWidgetItem): argument 3 has unexpected type 'str' - 错误传入self作为第一个参数:
self.tblLieferboxen.setItem(self, 0,0,'foo'),报错:TypeError: setItem(self, int, int, QTableWidgetItem): argument 1 has unexpected type 'deckblaetterUi' - 使用关键字参数调用
self.tblLieferboxen.setItem(row=0, column=0, item='foo'),报错:TypeError: setItem() takes no keyword arguments
完整类代码如下:
from PyQt5 import QtWidgets, uic, QtCore, QtGui class deckblaetterUi(QtWidgets.QMainWindow): def __init__(self): super(deckblaetterUi, self).__init__() uic.loadUi('ui/deckblaetter.ui', self) self.rb3040.clicked.connect(self.waehle3040) self.rb3030.clicked.connect(self.waehle3030) self.rb2121.clicked.connect(self.waehle2121) self.rb2121C.clicked.connect(self.waehle2121C) self.tblLieferboxen.setItem(0, 0, 'foo') self.btnBoxenlabelsErstellen.clicked.connect(self.btnBoxenlabelsErstellenClicked) self.show()
解决方法
核心问题
QTableWidget.setItem()方法的第三个参数必须是QTableWidgetItem实例,不能直接传入字符串。此外:
- 调用实例方法时不需要手动传入
self(self.tblLieferboxen已经是实例,调用方法时会自动绑定); - PyQt的很多C++绑定方法不支持关键字参数,必须按位置传参。
修正代码
将字符串包装为QTableWidgetItem对象后传入:
# 替换原错误行 self.tblLieferboxen.setItem(0, 0, QtWidgets.QTableWidgetItem('foo'))
如果需要设置单元格不可编辑,还可以额外添加:
item = QtWidgets.QTableWidgetItem('foo') item.setFlags(item.flags() & ~QtCore.Qt.ItemIsEditable) self.tblLieferboxen.setItem(0, 0, item)
修正后的完整类代码:
from PyQt5 import QtWidgets, uic, QtCore, QtGui class deckblaetterUi(QtWidgets.QMainWindow): def __init__(self): super(deckblaetterUi, self).__init__() uic.loadUi('ui/deckblaetter.ui', self) self.rb3040.clicked.connect(self.waehle3040) self.rb3030.clicked.connect(self.waehle3030) self.rb2121.clicked.connect(self.waehle2121) self.rb2121C.clicked.connect(self.waehle2121C) # 修正后的单元格赋值代码 self.tblLieferboxen.setItem(0, 0, QtWidgets.QTableWidgetItem('foo')) self.btnBoxenlabelsErstellen.clicked.connect(self.btnBoxenlabelsErstellenClicked) self.show()
内容的提问来源于stack exchange,提问作者hirnwunde
相关产品推荐
相关产品推荐

