当前位置: 代码迷 >> 综合 >> Python PyQt5 QtreeView 树形结构下获取指定路径,显示目录下所有文件
  详细解决方案

Python PyQt5 QtreeView 树形结构下获取指定路径,显示目录下所有文件

热度:39   发布时间:2023-11-25 06:55:39.0

最近在做Python页面逻辑功能的过程中,想实现一个文件筛选的功能,但是在网上找了一下,没有找到相类似的,大多都是一些C++的代码段,经过不断的摸索,终于把这个功能做出来了,希望大家做类似功能,能够对你有所帮助。
 

功能如下需求:


       左半部分是QtreeView生成的系统树形文件夹结构(只显示文件夹),右半部分通过在QtreeView中双击点中某个文件夹后,在右边的窗口中会显示出这个文件夹中的所有文件(只显示文件)。都来通过Python中QFileSystemModel进行获取Windows下所有文件进行筛选后得到指定路径,根据指定路径进行文件筛选,然后呈现文件夹下的所有文件。

所用功能段:

Pyqy5   QTreeView  类型引用(呈现内容区别)

Pyqt5    QtCore.QDir类型引用(文件夹,文件筛选)

Pyqt5    QFileSystemModel   model(文件流获取,数据插入,数据清空等)模块使用

Pyqt5    Layout 模块使用  (窗口创建,按钮创建,样式修改)

OS模块文件流获取(文件夹,文件获取)

反斜杠在Python中需要转义(‘\’需要转成这样'\\')

 

源码如下:

import sys
import os
from PyQt5 import QtCore
from PyQt5.Qt import *class MainWidget(QWidget):def __init__(self, parent=None):super(MainWidget, self).__init__(parent)#获取系统所有文件self.model01 = QFileSystemModel()#进行筛选只显示文件夹,不显示文件和特色文件self.model01.setFilter(QtCore.QDir.Dirs|QtCore.QDir.NoDotAndDotDot)self.model01.setRootPath('')#定义创建左边窗口self.treeView1 = QTreeView(self)self.treeView1.setModel(self.model01)for col in range(1, 4):self.treeView1.setColumnHidden(col, True)self.treeView1.doubleClicked.connect(self.initUI)#定义创建右边窗口self.model02 = QStandardItemModel()self.treeView2 = QTreeView(self)self.treeView2.setModel(self.model02)#将创建的窗口进行添加self.layout = QHBoxLayout()self.layout.addWidget(self.treeView1)self.layout.addWidget(self.treeView2)self.setLayout(self.layout)def initUI(self, Qmodelidx):#每次点击清空右边窗口数据self.model02.clear()#定义一个数组存储路径下的所有文件PathData = []#获取双击后的指定路径filePath = self.model01.filePath(Qmodelidx)# List窗口文件赋值PathDataName = self.model02.invisibleRootItem()#拿到文件夹下的所有文件PathDataSet = os.listdir(filePath)#进行将拿到的数据进行排序PathDataSet.sort()#遍历判断拿到的文件是文件夹还是文件,Flase为文件,True为文件夹for Data in range(len(PathDataSet)):if os.path.isdir(filePath + '\\' + PathDataSet[Data]) == False:PathData.append(PathDataSet[Data])elif os.path.isdir(filePath + '\\' + PathDataSet[Data]) == True:print('2')#将拿到的所有文件放到数组中进行右边窗口赋值。for got in range(len(PathData)):gosData = QStandardItem(PathData[got])PathDataName.setChild(got, gosData)if __name__ == "__main__":app = QApplication(sys.argv)window = MainWidget()window.resize(600, 400)window.show()sys.exit(app.exec_())

效果如下:这样我就将C盘下的NVIDIA文件夹中的所有文件都呈现在了右边的窗口中。