使用Python和PyQt打造自定义文件浏览器

566

在现代软件开发中,图形用户界面(GUI)的应用程序越来越受到开发者的青睐。Python作为一种高效、易学的编程语言,结合PyQt这一强大的GUI库,使得开发者能够快速构建出功能丰富、界面友好的应用程序。本文将介绍如何使用Python和PyQt打造一个自定义的文件浏览器,帮助用户更方便地管理和浏览文件。

一、效果展示

使用Python和PyQt打造自定义文件浏览器

二、界面设计 

该界面通过Qt Designer设计

# -*- coding: utf-8 -*-
 
# Form implementation generated from reading ui file 'file_web.ui'
#
# Created by: PyQt5 UI code generator 5.15.9
#
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again.  Do not edit this file unless you know what you are doing.
 
 
from PyQt5 import QtCore, QtGui, QtWidgets
 
 
class Ui_Form(object):
    def setupUi(self, Form):
        Form.setObjectName("Form")
        Form.resize(565, 459)
        self.verticalLayoutWidget = QtWidgets.QWidget(Form)
        self.verticalLayoutWidget.setGeometry(QtCore.QRect(10, 10, 551, 441))
        self.verticalLayoutWidget.setObjectName("verticalLayoutWidget")
        self.verticalLayout = QtWidgets.QVBoxLayout(self.verticalLayoutWidget)
        self.verticalLayout.setContentsMargins(0, 0, 0, 0)
        self.verticalLayout.setObjectName("verticalLayout")
        self.horizontalLayout = QtWidgets.QHBoxLayout()
        self.horizontalLayout.setObjectName("horizontalLayout")
        self.back_btn = QtWidgets.QPushButton(self.verticalLayoutWidget)
        self.back_btn.setMinimumSize(QtCore.QSize(40, 40))
        font = QtGui.QFont()
        font.setPointSize(15)
        self.back_btn.setFont(font)
        self.back_btn.setObjectName("back_btn")
        self.horizontalLayout.addWidget(self.back_btn)
        self.lineEdit = QtWidgets.QLineEdit(self.verticalLayoutWidget)
        font = QtGui.QFont()
        font.setPointSize(15)
        self.lineEdit.setFont(font)
        self.lineEdit.setObjectName("lineEdit")
        self.horizontalLayout.addWidget(self.lineEdit)
        self.verticalLayout.addLayout(self.horizontalLayout)
        self.listWidget = QtWidgets.QListWidget(self.verticalLayoutWidget)
        self.listWidget.setObjectName("listWidget")
        self.verticalLayout.addWidget(self.listWidget)
 
        self.retranslateUi(Form)
        QtCore.QMetaObject.connectSlotsByName(Form)
 
    def retranslateUi(self, Form):
        _translate = QtCore.QCoreApplication.translate
        Form.setWindowTitle(_translate("Form", "文件浏览器"))
        self.back_btn.setText(_translate("Form", "返回"))

使用Python和PyQt打造自定义文件浏览器

三、 信号与槽连接

3.1、得到当前的目录路径

def show_dir(self):
    # 显示当前目录内容的函数
    self.listWidget.clear()  # 清空列表
    self.dir.setPath(self.lineEdit.text())  # 设置QDir对象的路径为文本框中的路径
    Dir_filter = QDir.AllEntries | QDir.NoDotAndDotDot  # 过滤条件:所有条目,不包括.和..
    sort_filter = QDir.DirsFirst  # 排序条件:文件夹优先
 
    self.list_list = self.dir.entryInfoList(Dir_filter, sort_filter)  # 获取目录列表
    for i in self.list_list:  # 遍历目录列表
        item = QListWidgetItem()  # 创建新的列表项
        # 根据条目类型设置图标
        if i.isDir():
            item.setIcon(QIcon('../菜单/images/icon/dir.png'))  # 设置目录图标
        elif i.isFile():
            item.setIcon(QIcon('../菜单/images/icon/file.png'))  # 设置文件图标
        item.setText(i.fileName())  # 设置列表项的文本为文件或目录名
        self.listWidget.addItem(item)  # 将项添加到列表中

3.2、 选择目录中的选项双击

def btn_btn(self, item):
    # 双击列表项的槽函数
    result = self.dir.cd(item.text())  # 进入选中的目录
    print(result)  # 打印进入结果
    if result:  # 如果成功进入目录
        path = self.dir.absolutePath()  # 获取当前目录的绝对路径
        self.lineEdit.setText(path)  # 更新路径文本框
        self.show_dir()  # 更新目录展示
    else:  # 如果不是目录,尝试打开文件
        filepath = self.dir.absolutePath() + '/' + item.text()  # 构造文件路径
        # print(filepath)
        self.progess = QProcess(self)  # 创建QProcess对象用于启动子进程
        argv = []  # 存储进程的参数
        argv.append("notepad.py")  # 添加要执行的脚本
        argv.append(filepath)  # 添加文件路径作为参数
        self.progess.start('python', argv)  # 启动python进程

3.3、 返回上层目录

def back_slot(self):
    # 返回上层目录的槽函数
    result = self.dir.cdUp()  # 尝试进入上层目录
    if result:  # 如果成功
        path = self.dir.absolutePath()  # 获取当前目录的绝对路径
        print(path)  # 打印路径
        self.lineEdit.setText(path)  # 更新文本框中的路径
        self.show_dir()  # 更新目录展示

四、用到的库函数 

1.QDir      

  • setPath()        设置路径

  • entryInfoList() 获取当前目录下所有文件夹以及文件信息,返回一个列表

  • cd()        切换目录

  • cdUp()        返回上一级目录

  • absolutePath()        获取当前目录的绝对路径

2.QListWidget

  • addItem()        添加单元项

  • clear()        清空列表

  • itemDoubleClicked()        单元项双击信号

3.QListWidgetItem

  • setText()        设置文本

  • setIcon()        设置图标

  • text()        获取文本内容

4.QFileInfoList

at()        访问元素

5.QFileInfo

  • fileName()        获取文件名

  • isDir()        判断是不是文件夹

  • isFile()        判断是不是文件

6.QProcess

start()        启动进程

五、完整代码

import sys
from PyQt5.QtGui import QIcon
from file_web import Ui_Form  # 导入生成的UI类
from PyQt5.QtWidgets import QApplication, QWidget, QListWidget, QListWidgetItem  # 导入所需的Qt组件
from PyQt5.QtCore import QDir, QProcess  # 导入目录和进程相关的类
 
 
class fileWidge(QWidget, Ui_Form):
    def __init__(self):
        super().__init__()
        self.setupUi(self)  # 设置UI界面
 
        self.lineEdit.setText('./')  # 设置初始路径为当前目录
 
        self.dir = QDir()  # 创建QDir对象以处理目录
        self.show_dir()  # 显示当前目录的内容
 
        self.slot_init()  # 初始化信号和槽连接
 
    def slot_init(self):
        # 连接按钮和列表项的信号到相应的槽函数
        self.back_btn.clicked.connect(self.back_slot)  # 返回上级目录按钮
        self.listWidget.itemDoubleClicked.connect(self.btn_btn)  # 双击列表项打开
 
    def back_slot(self):
        # 返回上层目录的槽函数
        result = self.dir.cdUp()  # 尝试进入上层目录
        if result:  # 如果成功
            path = self.dir.absolutePath()  # 获取当前目录的绝对路径
            print(path)  # 打印路径
            self.lineEdit.setText(path)  # 更新文本框中的路径
            self.show_dir()  # 更新目录展示
 
    def btn_btn(self, item):
        # 双击列表项的槽函数
        result = self.dir.cd(item.text())  # 进入选中的目录
        print(result)  # 打印进入结果
        if result:  # 如果成功进入目录
            path = self.dir.absolutePath()  # 获取当前目录的绝对路径
            self.lineEdit.setText(path)  # 更新路径文本框
            self.show_dir()  # 更新目录展示
        else:  # 如果不是目录,尝试打开文件
            filepath = self.dir.absolutePath() + '/' + item.text()  # 构造文件路径
            # print(filepath)
            self.progess = QProcess(self)  # 创建QProcess对象用于启动子进程
            argv = []  # 存储进程的参数
            argv.append("notepad.py")  # 添加要执行的脚本
            argv.append(filepath)  # 添加文件路径作为参数
            self.progess.start('python', argv)  # 启动python进程
 
    def show_dir(self):
        # 显示当前目录内容的函数
        self.listWidget.clear()  # 清空列表
        self.dir.setPath(self.lineEdit.text())  # 设置QDir对象的路径为文本框中的路径
        Dir_filter = QDir.AllEntries | QDir.NoDotAndDotDot  # 过滤条件:所有条目,不包括.和..
        sort_filter = QDir.DirsFirst  # 排序条件:文件夹优先
 
        self.list_list = self.dir.entryInfoList(Dir_filter, sort_filter)  # 获取目录列表
        for i in self.list_list:  # 遍历目录列表
            item = QListWidgetItem()  # 创建新的列表项
            # 根据条目类型设置图标
            if i.isDir():
                item.setIcon(QIcon('../菜单/images/icon/dir.png'))  # 设置目录图标
            elif i.isFile():
                item.setIcon(QIcon('../菜单/images/icon/file.png'))  # 设置文件图标
            item.setText(i.fileName())  # 设置列表项的文本为文件或目录名
            self.listWidget.addItem(item)  # 将项添加到列表中
 
 
if __name__ == '__main__':
    app = QApplication(sys.argv)  # 创建应用程序实例
    windows = fileWidge()  # 创建主窗口实例
 
    windows.show()  # 显示主窗口
    sys.exit(app.exec_())  # 运行应用程序并在退出时关闭

总结

通过本文的介绍,我们成功使用Python和PyQt打造了一个自定义的文件浏览器。这个文件浏览器不仅具备基本的文件浏览功能,还可以根据用户需求进行扩展和定制。Python和PyQt的强大功能和灵活性,使得开发者能够快速构建出功能丰富、界面友好的应用程序。希望本文的介绍对您有所帮助,激发您在Python和PyQt领域的探索和创新。

Python PyQt 文件浏览器
THE END
蜜芽
故事不长,也不难讲,四字概括,毫无意义。

相关推荐

Python yield 用法大全:轻松掌握生成器与迭代器设计
在Python中,yield关键字是构建生成器的核心工具,它通过状态保存机制实现了高效的内存管理和惰性计算。与传统的迭代器实现相比,yield能将迭代器设计从复杂的类定义简化为直...
2025-09-15 编程技术
549

基于Python的旅游数据分析可视化系统【2026最新】
本研究成功开发了基于Python+Django+Vue+MySQL的旅游数据分析可视化系统,实现了从数据采集到可视化展示的全流程管理。系统采用前后端分离架构,前端通过Vue框架构建响应式界...
2025-09-13 编程技术
575

手把手教你用Python读取txt文件:从基础到实战的完整教程
Python作为数据处理的利器,文件读写是其基础核心功能。掌握txt文件读取不仅能处理日志、配置文件等常见场景,更是理解Python文件I/O的基石。本文ZHANID工具网将从基础语法到...
2025-09-12 编程技术
546

Python Flask 入门指南:从零开始搭建你的第一个 Web 应用
Flask作为 Python 中最轻量级且灵活的 Web 框架之一,特别适合初学者快速上手 Web 应用开发。本文将带你一步步了解如何在本地环境中安装 Flask、创建一个简单的 Web 应用,并...
2025-09-11 编程技术
534

Python 如何调用 MediaPipe?详细安装与使用指南
MediaPipe 是 Google 开发的跨平台机器学习框架,支持实时处理视觉、音频和文本数据。本文脚本之家将系统讲解 Python 环境下 MediaPipe 的安装、配置及核心功能调用方法,涵盖...
2025-09-10 编程技术
577

基于Python开发一个利率计算器的思路及示例代码
利率计算是金融领域的基础需求,涵盖贷款利息、存款收益、投资回报等场景。传统计算依赖手工公式或Excel表格,存在效率低、易出错等问题。Python凭借其简洁的语法和强大的数学...
2025-09-09 编程技术
517