如何在未通过.addTopLevelItem()添加到TreeWidget的情况下设置Item Widget?

0 投票
1 回答
762 浏览
提问于 2025-04-18 16:15

每个 QTreeWidgetItem 的列项都是用 QComboBox 填充的。

假设我创建了一个 QTreeWidgetItem

tree=QtGui.QTreeWidget()
treeItem=QtGui.QTreeWidgetItem()
tree.addTopLevelItem(treeItem) 

for i in range(10):
    tree.setItemWidget(item, i, QtGui.QComboBox())

现在,如果我把 tree.addTopLevelItem(treeItem) 这一行注释掉,那么就不会有下拉框(combobox)被添加到这个 QTreeWidgetItem 中。换句话说,我必须把 QTreeWidgetItem 加入到树形结构中,才能往这个项里添加 QComboBox。但是在创建 QTreeWidgetItem 的时候,我并不知道它会成为一个顶级项(topLevelItem),还是会作为子项被添加到另一个顶级项下。

我是不是应该直接把这个项当作顶级项添加到树里,然后再把它重新分配为子项呢?我应该用什么方法把一个顶级项变成另一个顶级项的子项呢?

1 个回答

1

QTreeWidget 中创建数据有很多种方法。我个人喜欢的方式是使用 QtGui.QTreeWidgetItem 的构造函数,这样可以直接把它连接到根项目,而不需要使用 QTreeWidget.addTopLevelItem,我建议大家不要用这个方法。

下面是一个例子:

myQTreeWidget = QtGui.QTreeWidget()
listsHeader = ['A', 'B', 'C']
myQTreeWidget.setHeaderItem(QtGui.QTreeWidgetItem(listsHeader))
dataQTreeWidgetItem = QtGui.QTreeWidgetItem(myQTreeWidget) # assgin QTreeWidget
for i in range(len(listsHeader)):
    dataQTreeWidgetItem.setText(0, 'INDEX ' + str(i)) # Test text in column
    myQTreeWidget.setItemWidget(dataQTreeWidgetItem, i, QtGui.QComboBox())

参考链接 : http://pyqt.sourceforge.net/Docs/PyQt4/qtreewidgetitem.html#QTreeWidgetItem-3


编辑于 2014年7月8日 0:50 在列表中添加头部。


祝好,

撰写回答