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)
我创建了一个带有 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)