You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 16:09:17