如何在PyQt窗口中以ListView形式显示指定目录的文件
嘿,这事儿其实用PyQt自带的QFileSystemModel就能轻松搞定,正好能实现你说的类似文件对话框右侧列表的效果。我给你一步步拆解,附完整可运行的代码示例,看完你就能直接上手!
核心思路
咱们要用到的QFileSystemModel是PyQt专门为文件系统打造的模型类,它能自动帮我们读取目录下的文件、文件夹信息,还自带交互逻辑(比如点击文件夹进入子目录)。只需要把这个模型和QListView绑定,就能快速实现你要的效果,不用自己手动遍历目录写逻辑,省心又高效。
具体实现步骤
1. 导入必备模块
首先得把需要的PyQt组件和系统模块导入进来:
import sys from PyQt5.QtWidgets import QApplication, QMainWindow, QListView from PyQt5.QtCore import QDir
2. 构建主窗口与ListView控件
创建一个主窗口,把QListView作为核心控件放进去,用来展示文件列表:
class FileListViewWindow(QMainWindow): def __init__(self): super().__init__() self.setWindowTitle("目录文件列表") self.setGeometry(100, 100, 600, 400) # 设置窗口位置和大小 # 创建ListView并设为主窗口中心控件 self.list_view = QListView(self) self.setCentralWidget(self.list_view)
3. 配置文件系统模型
实例化QFileSystemModel,并指定要显示的根目录,还可以按需调整显示规则:
# 配置文件系统模型 self.file_model = QFileSystemModel() # 替换成你想要展示的目标目录,示例用当前运行目录,你可以改成绝对路径比如"D:/MyDocuments" target_dir = QDir.currentPath() self.file_model.setRootPath(target_dir)
4. 绑定模型与ListView
把模型和ListView关联起来,让ListView显示指定目录的内容:
# 将模型绑定到ListView,并定位到目标目录的索引 self.list_view.setModel(self.file_model) self.list_view.setRootIndex(self.file_model.index(target_dir))
完整可运行代码
把上面的部分整合起来,就是完整的代码了,还加了一些可选配置说明:
import sys from PyQt5.QtWidgets import QApplication, QMainWindow, QListView from PyQt5.QtCore import QDir class FileListViewWindow(QMainWindow): def __init__(self): super().__init__() self.setWindowTitle("目录文件列表") self.setGeometry(100, 100, 600, 400) # 创建ListView控件 self.list_view = QListView(self) self.setCentralWidget(self.list_view) # 配置文件系统模型 self.file_model = QFileSystemModel() # 替换成你需要展示的目录路径 target_dir = QDir.currentPath() # 示例:当前运行目录 # target_dir = "D:/MyCustomFiles" # 自定义目录示例 self.file_model.setRootPath(target_dir) # 绑定模型到ListView,定位到目标目录 self.list_view.setModel(self.file_model) self.list_view.setRootIndex(self.file_model.index(target_dir)) # 可选配置:按需调整显示规则 # 只显示文件,不显示文件夹和特殊目录(.和..) # self.file_model.setFilter(QDir.Files | QDir.NoDotAndDotDot) # 只显示文件夹 # self.file_model.setFilter(QDir.Dirs | QDir.NoDotAndDotDot) if __name__ == "__main__": app = QApplication(sys.argv) window = FileListViewWindow() window.show() sys.exit(app.exec_())
额外说明
- 运行代码后,你会看到ListView里显示指定目录下的所有文件和文件夹,双击文件夹就能进入子目录查看内容,和你说的文件对话框右侧效果完全一致
- 如果需要自定义样式(比如图标、字体),可以通过
QListView的样式表或者模型的data()方法来调整 - 模型本身还支持获取文件的详细信息(比如大小、修改时间),如果需要显示多列内容,可以换成
QTableView来配合使用
内容的提问来源于stack exchange,提问作者X-Black...
相关产品推荐
相关产品推荐

