从QTreeView中的父行中获取特定列,可以通过以下步骤实现:
下面是一个示例代码,演示如何从QTreeView中的父行中获取特定列的数据:
# 导入必要的模块
from PyQt5.QtWidgets import QApplication, QMainWindow, QTreeView
from PyQt5.QtCore import QAbstractItemModel, QModelIndex
# 自定义的数据模型类
class MyModel(QAbstractItemModel):
def __init__(self, data, parent=None):
super().__init__(parent)
self._data = data
def index(self, row, column, parent=QModelIndex()):
if not self.hasIndex(row, column, parent):
return QModelIndex()
if not parent.isValid():
parentItem = self._data
else:
parentItem = parent.internalPointer()
childItem = parentItem[row]
if childItem:
return self.createIndex(row, column, childItem)
else:
return QModelIndex()
def parent(self, index):
if not index.isValid():
return QModelIndex()
childItem = index.internalPointer()
parentItem = childItem.parent()
if parentItem == self._data:
return QModelIndex()
return self.createIndex(parentItem.row(), 0, parentItem)
def rowCount(self, parent=QModelIndex()):
if parent.column() > 0:
return 0
if not parent.isValid():
parentItem = self._data
else:
parentItem = parent.internalPointer()
return len(parentItem)
def columnCount(self, parent=QModelIndex()):
return 2
def data(self, index, role=Qt.DisplayRole):
if not index.isValid():
return None
if role == Qt.DisplayRole:
item = index.internalPointer()
if index.column() == 0:
return item.name()
elif index.column() == 1:
return item.value()
return None
# 创建应用程序和主窗口
app = QApplication([])
window = QMainWindow()
# 创建QTreeView并设置数据模型
treeView = QTreeView(window)
data = [
{'name': 'Parent 1', 'value': 'Value 1'},
{'name': 'Parent 2', 'value': 'Value 2'},
{'name': 'Parent 3', 'value': 'Value 3'}
]
model = MyModel(data)
treeView.setModel(model)
# 获取选中行的父索引
selectedIndexes = treeView.selectedIndexes()
if selectedIndexes:
selectedIndex = selectedIndexes[0]
parentIndex = selectedIndex.parent()
# 获取特定列的数据
column = 1 # 假设要获取第二列的数据
data = model.data(parentIndex.sibling(parentIndex.row(), column))
print(data)
# 显示窗口
window.show()
app.exec_()
在上面的示例代码中,我们创建了一个自定义的数据模型类MyModel
,继承自QAbstractItemModel
。该模型类用于提供数据给QTreeView显示。
然后,我们创建了一个QTreeView实例,并设置了数据模型。在获取选中行的父索引后,我们通过调用数据模型的data()方法来获取特定列的数据。
请注意,这只是一个示例代码,实际应用中需要根据具体情况进行适当的修改和调整。
领取专属 10元无门槛券
手把手带您无忧上云