QTableWidget 分配了两次项目,为什么?

QTableWidget has item assigned twice, why?

我创建了一个带有 Table 的小部件,当我使用 pyuic 转换它时,我得到以下代码,到目前为止没有什么奇怪的。当我们到达第二个 item = QtWidgets.QTableWidgetItem() 时,我不明白发生了什么。在我看来,它正在重新分配变量 item 。但是如果我删除第二个赋值 table 输出 Short | Short。这没有道理为什么会这样。为什么删除第二个分配的 item 会使我的 table 的顶部不同?

def setupUi(self, Form):
    Form.setObjectName("Form")
    self.verticalLayout = QtWidgets.QVBoxLayout(Form)
    self.verticalLayout.setObjectName("verticalLayout")
    self.tableWidget = QtWidgets.QTableWidget(Form)
    self.tableWidget.setObjectName("tableWidget")
    self.tableWidget.setColumnCount(2)
    self.tableWidget.setRowCount(0)
    item = QtWidgets.QTableWidgetItem()
    self.tableWidget.setHorizontalHeaderItem(0, item)
    item = QtWidgets.QTableWidgetItem()
    self.tableWidget.setHorizontalHeaderItem(1, item)
    self.verticalLayout.addWidget(self.tableWidget)

    self.retranslateUi(Form)
    QtCore.QMetaObject.connectSlotsByName(Form)

def retranslateUi(self, Form):
    _translate = QtCore.QCoreApplication.translate
    Form.setWindowTitle(("Form"))
    item = self.tableWidget.horizontalHeaderItem(0)
    item.setText(("Descrip"))
    item = self.tableWidget.horizontalHeaderItem(1)
    item.setText(("Short"))

这是合乎逻辑的。

item = QtWidgets.QTableWidgetItem()
self.tableWidget.setHorizontalHeaderItem(0, item)
# item = QtWidgets.QTableWidgetItem()
self.tableWidget.setHorizontalHeaderItem(1, item)

如果删除第三行,item 变量将继续引用同一个实例。因此,在最后一行中,您将基本上引用与第一个 header 项中相同的数据。所以你最终得到两个 header 项目,它们使用相同的 QTableWidgetItem 作为数据。

现在让我们来看看 retranslateUi():

item = self.tableWidget.horizontalHeaderItem(0)
item.setText(("Descrip"))
item = self.tableWidget.horizontalHeaderItem(1)
item.setText(("Short"))

第一行和第二行您将检索项目实例并向其添加文本 'Descrip'。然后你会得到第二个 header 项目的项目,它与之前的 object 一模一样。因此,在最后一行中,您将文本设置为 'Short',并且您的 header 都将显示 'Short'.

如果要检查,请使用以下代码:

item1 = self.tableWidget.horizontalHeaderItem(0)
item2 = self.tableWidget.horizontalHeaderItem(1)
print(item1 == item2)