使用QFileSystemModel模型和QTreeView来展示目录树

QFileSystemModel是一个用于访问本机文件系统的数据模型(还有一个是QDirModel,两者主要区别是使用主线程还是独立线程,建议使用独立线程的QFileSystemModel)。

QFileSystemModel模型

  • QFileSystemModel配合qt的view可以实现目录的访问。
  • QFileSystemModel自带目录变化监听
  • 此类提供对本地文件系统的访问,提供了用于重命名和删除文件和目录以及创建新目录的功能。

设置目录

1
2
3
4
setRootPath(self, str) -> QModelIndex 
通过在模型上安装文件系统监视程序,设置模型监视的目录
此目录中文件和目录的任何更改都将反映在模型中。
如果没有设置rootPath,将不会获取任何文件或目录

获取信息

1
2
3
4
5
6
7
8
fileInfo(self, QModelIndex) -> QFileInfo
fileName(self, QModelIndex) -> str
filePath(self, QModelIndex) -> str
isDir(self, QModelIndex) -> bool
isReadOnly(self) -> bool
lastModified(self, QModelIndex) -> QDateTime
size(self, QModelIndex) -> int 返回文件大小(单位字节)
type(self, QModelIndex) -> str 返回类型,比如"Directory""JPEG file"

操作

1
2
3
4
mkdir(self, QModelIndex, str) -> QModelIndex
remove(self, QModelIndex) -> bool
rmdir(self, QModelIndex) -> bool
setReadOnly(self, bool)

QTreeView

QTreeView继承自QAbstractItemView,这里只记录一下QAbstractItemView的一些信号。

1
2
3
4
5
6
7
activated (index)
clicked (index)
doubleClicked (index)
entered (index)
iconSizeChanged (size)
pressed (index)
viewportEntered()

目录树的实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23

class App(QWidget):

def __init__(self):
super().__init__()
self.initUI()

def initUI(self):
self.model = QFileSystemModel()
self.model.setRootPath('') # 设置根目录
self.tree = QTreeView()
self.tree.setModel(self.model)
self.tree.setAnimated(True) #显示展开和关闭的动画
self.tree.setIndentation(20) # 设置缩进
self.tree.setSortingEnabled(True) #设置是否能够排序
self.tree.clicked.connect(self.action)
windowLayout = QVBoxLayout(self)
windowLayout.addWidget(self.tree)
self.show()

def action(self, index):
print(self.model.filePath(index))

文章作者: Dar1in9
文章链接: http://dar1in9s.github.io/2020/02/17/PyQt5/使用QFileSystemModel模型和QTreeView来展示目录树/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Dar1in9's Blog