我使用的是pyqt5和Python3.6。我对QModel/TreeView中的索引函数感到困惑,并要求在这里清除我的大脑结。有些帖子更让我困惑,因为它们非常特别。我的问题或多或少是一个基本的问题。
我有一个包含数据的模型(基于Uludag's great tutorials),并将其设置到我的树中:
treeView = QTreeView()
treeView.show()
treeView.setModel(model)
#additional code
treeView.clicked.connect(treeViewStructure_clicked)现在,我必须根据所选项目在程序中准备进一步的操作。我可以通过以下方式获得物品:
def treeViewStructure_clicked(self):
#get the row of the click and print
index = treeView.currentIndex()
print(index.row())
print('selected item index at %s with data: %s' % (index.row(), index.data()))到目前一切尚好。但是索引是从treeView生成的(模型不起作用)。当然,如何写回它们将被同步?
发布于 2017-09-30 02:37:04
我很想留下评论,但我没有足够的声誉。
由于您的模型实现没有包含可以返回所选索引的方法,因此我必须从pyqt5获取它。因为treeView是一个QTreeView,所以你可以:treeView.selectionModel().selectedIndexes()
该信息来自here。它们将返回一个QModelIndex列表,它在这里有一个api。(请注意,虽然这个网站上有代码示例,但它是用C++编写的,但它仍然是可读的)
在api中,您可以从QModelIndex对象获取行和列以及父对象。
通常,我只需通过treeView.selectionModel().selectedIndexes()返回的对象修改数据。
例如:
arr = treeView.selectionModel().selectedIndexes()
index = arr[0]然后只需修改索引即可。
但是,如果出于某种原因,您必须使用自己的模型,那么您可以做一件事。因为它扩展了QAbstractItemModel,所以可以使用索引函数。例如:
arr = treeView.selectionModel().selectedIndexes()
indexTemp = arr[0]
index = model.index(indexTemp.row(), indexTemp.column(), indexTemp.parent())然后通过setData函数修改该值
但是如你所见,这是一个额外的步骤来获得相同的对象
https://stackoverflow.com/questions/46487980
复制相似问题