QStandardItem无findItems属性报错:TreeView路径组织代码排查
QTreeView路径组织报错:AttributeError分析与解决
问题重现
尝试在QTreeView中组织多条文件路径时,代码运行报错:
AttributeError: 'QStandardItem' object has no attribute 'findItems'
its like QStandardItem do no have a function to find the item
问题原因
QStandardItem类并没有findItems方法,这个查找方法是QStandardItemModel独有的。代码中当parent为QStandardItem对象时,直接调用parent.findItems(text),这就触发了属性不存在的错误。
解决方案
要查找父节点下的子项,需要遍历父节点的所有子项进行文本匹配。修改get_or_create_item方法并优化路径处理逻辑即可解决问题:
修改后的完整代码
import sys from PyQt5 import QtGui, QtCore from PyQt5.QtWidgets import QApplication, QMainWindow, QTreeView, QVBoxLayout, QWidget class TreeViewExample(QMainWindow): def __init__(self): super().__init__() self.setWindowTitle("QTreeView Example") self.setGeometry(100, 100, 800, 600) self.central_widget = QWidget(self) self.setCentralWidget(self.central_widget) self.tree_view = QTreeView(self.central_widget) self.model = QtGui.QStandardItemModel() self.tree_view.setModel(self.model) # 自定义文件路径列表 file_paths = [ "/home/user/documents/file1.txt", "/home/user/documents/folder1/file2.txt", "/home/user/documents/folder1/file3.txt", "/home/user/pictures/photo1.jpg", "/home/user/pictures/folder2/photo2.jpg", ] # 组织路径为树形层级 self.organize_paths(file_paths) # 设置布局 layout = QVBoxLayout(self.central_widget) layout.addWidget(self.tree_view) def organize_paths(self, file_paths): for path in file_paths: components = path.split("/") current_parent = None for component in components: # 跳过空字符串(路径开头的/分割后会产生空元素) if not component: continue item = self.get_or_create_item(component, parent=current_parent) current_parent = item def get_or_create_item(self, text, parent=None): # 查找已有项 if parent: # 遍历父节点的所有子项匹配文本 for row in range(parent.rowCount()): child_item = parent.child(row) if child_item.text() == text: return child_item else: # 根节点从模型查找 items = self.model.findItems(text) if items: return items[0] # 没有找到则创建新项 item = QtGui.QStandardItem(text) if parent: parent.appendRow(item) else: self.model.appendRow(item) return item if __name__ == "__main__": app = QApplication(sys.argv) window = TreeViewExample() window.show() sys.exit(app.exec_())
额外优化说明
- 新增空字符串跳过逻辑:解决路径开头
/分割后产生空元素的问题,避免创建无用的空节点。 - 父节点子项查找改为遍历匹配,完全符合
QStandardItem的API规范。
内容的提问来源于stack exchange,提问作者amine jisung
相关产品推荐
相关产品推荐

