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

时间:2018-04-13 15:49:09

标签: python pyqt qtablewidget

我已经创建了一个带有Table的窗口小部件,当我使用pyuic转换它时,我得到了下面的代码,到目前为止没什么太奇怪了。当我们到达第二个item = QtWidgets.QTableWidgetItem()时,我不明白发生了什么。我觉得它再次重新分配变量item。但是,如果我删除第二个分配表输出Short | Short。这是不合理的,为什么会出现这种情况。为什么要删除第二个分配的item会使我的表格顶部不同?

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"))

1 个答案:

答案 0 :(得分:0)

这是合乎逻辑的。

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

如果删除第三行,item变量将继续引用同一个实例。因此,在最后一行中,您将基本上引用与第一个标题项中相同的数据。因此,您最终会得到两个使用相同QTableWidgetItem的标头项。

现在我们来看看retranslateUi()

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

第一行和第二行,您将检索项目实例并向其添加文本“Descrip”。然后,您将获得第二个标题项的项目,该项目与以前完全相同。因此,在最后一行中,您将文本设置为“短”,并且两个标题都将显示为“短”。

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

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