我正在使用pyqt5和python 3.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生成的(模型不起作用)。如何将视图中的选择连接到模型,以便我有正确的Modelindex并可以更改模型中的数据? 当然,如何写回来他们会同步?换句话说,我需要哪个指数来源于何处,何处以及从何而来?
答案 0 :(得分:0)
我想发表评论,但我没有足够的声誉。
由于您的模型实现没有包含可以返回所选索引的方法,因此我必须从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 funtion修改值
但是正如你所看到的,获得同一个对象是一个额外的步骤