You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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...

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 07:09:54