python - PySide:QFileSystemModel - 显示/显示根项目
问题描述
我正在使用 QFileSystemModel 在 QTreeView 中显示设置根路径的子目录。一切正常,但如果 Root 项目现在处于隐藏状态,那就太好了。
model = QtGui.QFileSystemModel()
model.setRootPath(path)
treeview.setModel(model)
treeview.setRootIndex(model.index(path))
treeview.show()
编辑:操作系统是 Windows 7
解决方案
这个想法是使用父目录作为根目录并过滤兄弟目录,为此我创建了一个 QSortFilterProxyModel 从所需目录接收索引,但您必须将 QPersistentModelIndex 传递给它,因为后者是永久性的,不像 QModelIndex 可以更改任何时候。
import os
from PySide import QtCore, QtGui
class FileProxyModel(QtGui.QSortFilterProxyModel):
def setIndexPath(self, index):
self._index_path = index
self.invalidateFilter()
def filterAcceptsRow(self, sourceRow, sourceParent):
if hasattr(self, "_index_path"):
ix = self.sourceModel().index(sourceRow, 0, sourceParent)
if self._index_path.parent() == sourceParent and self._index_path != ix:
return False
return super(FileProxyModel, self).filterAcceptsRow(sourceRow, sourceParent)
if __name__ == '__main__':
import sys
app = QtGui.QApplication(sys.argv)
path = # ...
parent_dir = os.path.abspath(os.path.join(path, os.pardir))
treeview = QtGui.QTreeView()
model = QtGui.QFileSystemModel(treeview)
model.setRootPath(QtCore.QDir.rootPath())
proxy = FileProxyModel(treeview)
proxy.setSourceModel(model)
proxy.setIndexPath(QtCore.QPersistentModelIndex(model.index(path)))
treeview.setModel(proxy)
treeview.setRootIndex(proxy.mapFromSource(model.index(parent_dir)))
treeview.expandAll()
treeview.show()
sys.exit(app.exec_())
推荐阅读
- python - FileNotFound 错误:[Errno 2] 在 Windows 上迭代 Python 中的文件列表时没有这样的文件或目录 b?
- javascript - 在 Javascript / XMLHttpRequest 中保持连接活跃
- html - 当元素 Y 悬停时移动元素 X?
- python - 将 python 数据框中的日期格式化为 am/d/Y
- excel - 如何使用 Excel VBA 在 Word 中查找和替换文本?
- python - 创建一个非常简单的不和谐机器人的最佳方法=
- system.reactive - ToObservable 在某些情况下不会触发
- node.js - Sails v1 中无法识别的修饰符“_bsontype”
- r - 当内部有嵌套函数时,如何在 R 中以编程方式创建函数?
- tsql - 使用 BULK 从网络文件导入 Proc 定义