基于Python自制一个资源管理器

 更新时间:2025年02月19日 10:31:18   作者:席子哥哥的代码库  
这篇文章主要为大家详细介绍了如何基于Python自制一个资源管理器,文中的示例代码讲解详细,具有一定的借鉴价值,感兴趣的小伙伴可以了解下

本文为大家详细介绍了如何基于Python制作一个资源管理器,可以进行简单的本地资源管理,有需要的可以参考下

最终效果图

完整代码

import sys
from PyQt5.QtWidgets import (
    QApplication, QMainWindow, QTreeView, QFileSystemModel, QSplitter, QTextEdit, QVBoxLayout, QWidget, QPushButton, QListWidget, QListWidgetItem, QHBoxLayout
)
from PyQt5.QtCore import QDir, QFileInfo
from PyQt5.QtGui import QIcon
 
class ResourceBrowser(QMainWindow):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("资源浏览器")
        self.setGeometry(100, 100, 800, 600)
        self.setStyleSheet("""
            QMainWindow {
                background-color: #2E3440;
            }
            QListWidget {
                background-color: #3B4252;
                color: #ECEFF4;
                border: 1px solid #4C566A;
            }
            QPushButton {
                background-color: #81A1C1;
                color: #ECEFF4;
                padding: 5px;
                border: none;
            }
            QPushButton:hover {
                background-color: #5E81AC;
            }
        """)
 
        # 当前目录路径
        self.current_dir = QDir.rootPath()
 
        # 创建主布局
        main_widget = QWidget()
        self.setCentralWidget(main_widget)
        layout = QVBoxLayout(main_widget)
 
        # 创建分割器
        splitter = QSplitter()
        layout.addWidget(splitter)
 
        # 左侧布局
        left_widget = QWidget()
        left_layout = QVBoxLayout(left_widget)
 
        # 返回上一级按钮
        self.btn_back = QPushButton("返回上一级")
        self.btn_back.clicked.connect(self.go_back)
        left_layout.addWidget(self.btn_back)
 
        # 创建文件系统模型
        self.model = QFileSystemModel()
        self.model.setRootPath("")  # 设置根路径为空,显示所有磁盘
 
        # 创建树视图
        self.tree_view = QTreeView()
        self.tree_view.setModel(self.model)
        self.tree_view.setRootIndex(self.model.index(""))  # 设置根目录为空,显示所有磁盘
        self.tree_view.clicked.connect(self.on_item_clicked)  # 点击事件
        left_layout.addWidget(self.tree_view)
 
        # 将左侧布局添加到分割器
        splitter.addWidget(left_widget)
 
        # 创建右侧布局
        right_widget = QWidget()
        right_layout = QVBoxLayout(right_widget)
 
        # 创建右侧文件列表
        self.file_list = QListWidget()
        self.file_list.itemDoubleClicked.connect(self.on_file_double_clicked)  # 双击文件事件
        right_layout.addWidget(self.file_list)
 
        # 创建文本编辑框用于显示文件内容
        self.text_edit = QTextEdit()
        self.text_edit.setReadOnly(True)  # 设置为只读
        right_layout.addWidget(self.text_edit)
 
        # 将右侧布局添加到分割器
        splitter.addWidget(right_widget)
 
        # 设置分割器初始比例
        splitter.setSizes([300, 500])
 
    def on_item_clicked(self, index):
        """处理树视图项的点击事件"""
        file_path = self.model.filePath(index)
        if self.model.isDir(index):
            # 如果是文件夹,更新当前目录并显示文件列表
            self.current_dir = file_path
            self.update_file_list(file_path)
 
    def update_file_list(self, dir_path):
        """更新右侧文件列表"""
        self.file_list.clear()
        dir = QDir(dir_path)
        for file_info in dir.entryInfoList(QDir.Files | QDir.Dirs | QDir.NoDotAndDotDot):
            item = QListWidgetItem(file_info.fileName())
            if file_info.isDir():
                item.setIcon(QIcon.fromTheme("folder"))  # 文件夹图标
            else:
                item.setIcon(QIcon.fromTheme("text-x-generic"))  # 文件图标
            self.file_list.addItem(item)
 
    def on_file_double_clicked(self, item):
        """处理文件列表项的双击事件"""
        file_name = item.text()
        file_path = QDir(self.current_dir).filePath(file_name)
        if QFileInfo(file_path).isDir():
            # 如果是文件夹,更新当前目录并显示文件列表
            self.current_dir = file_path
            self.update_file_list(file_path)
        else:
            # 如果是文件,显示文件内容
            try:
                with open(file_path, "r", encoding="utf-8") as file:
                    self.text_edit.setPlainText(file.read())
            except Exception as e:
                self.text_edit.setPlainText(f"无法读取文件: {str(e)}")
 
    def go_back(self):
        """返回上一级目录"""
        current_dir = QDir(self.current_dir)
        if current_dir.cdUp():  # 尝试返回上一级目录
            self.current_dir = current_dir.absolutePath()  # 获取上一级目录的绝对路径
            self.update_file_list(self.current_dir)
            # 更新树视图的选中状态
            index = self.model.index(self.current_dir)
            self.tree_view.setCurrentIndex(index)
 
if __name__ == "__main__":
    app = QApplication(sys.argv)
    browser = ResourceBrowser()
    browser.show()
    sys.exit(app.exec())

到此这篇关于基于Python自制一个资源管理器的文章就介绍到这了,更多相关Python资源管理器内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python实现子类调用父类的方法

    Python实现子类调用父类的方法

    这篇文章主要介绍了Python实现子类调用父类的方法,解决子类覆盖父类初始化方法而出现的不确定问题,可通过调用超类构造方法的未绑定版本或者使用super函数来解决,需要的朋友可以参考下
    2014-11-11
  • PyGraphviz 安装使用及注意事项

    PyGraphviz 安装使用及注意事项

    PyGraphviz 是对 Graphviz 的封装,提供了 Python 接口的调用,这篇文章主要介绍了PyGraphviz 安装使用,本文通过实例代码给大家介绍的非常详细,需要的朋友可以参考下
    2023-02-02
  • Python基础教程之错误和异常的处理方法

    Python基础教程之错误和异常的处理方法

    程序在运行时,如果python解释器遇到一个错误,会停止程序的执行,并且提示一些错误信息,这就是异常,下面这篇文章主要给大家介绍了关于Python基础教程之错误和异常的处理方法,需要的朋友可以参考下
    2022-05-05
  • Python在画图时使用特殊符号的方法总结

    Python在画图时使用特殊符号的方法总结

    在制作图表时,如果遇到需要利用特殊符号进行表示时该怎么办呢?不用慌,这篇文章为大家总结了python画图中使用各种特殊符号的方式,需要的可以参考一下
    2022-04-04
  • Python使用pyinstaller打包成.exe文件执行后闪退的图文解决办法

    Python使用pyinstaller打包成.exe文件执行后闪退的图文解决办法

    这篇文章主要给大家介绍了关于Python使用pyinstaller打包成.exe文件执行后闪退的图文解决办法,闪退问题通常是由于程序运行过程中出现了未处理的异常或错误,导致程序崩溃,文中通过图文介绍的非常详细,需要的朋友可以参考下
    2023-12-12
  • pytest使用parametrize将参数化变量传递到fixture

    pytest使用parametrize将参数化变量传递到fixture

    这篇文章主要为大家介绍了pytest使用parametrize将参数化变量传递到fixture的使用详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-05-05
  • Python版中国省市经纬度

    Python版中国省市经纬度

    这篇文章主要介绍了Python版中国省市经纬度,需要的朋友可以参考下
    2020-02-02
  • python保存字典和读取字典的实例代码

    python保存字典和读取字典的实例代码

    这篇文章主要介绍了python保存字典和读取字典的实例代码,通过代码给大家介绍了python 使用列表和字典存储信息的相关代码,需要的朋友可以参考下
    2019-07-07
  • 用Python给二维码图片添加提示文字

    用Python给二维码图片添加提示文字

    今天教各位小伙伴怎么用Python给二维码图片添加提示文字,文中有非常详细的代码示例,对正在学习python的小伙伴很有帮助,需要的朋友可以参考下
    2021-05-05
  • Python安装第三方库攻略(pip和Anaconda)

    Python安装第三方库攻略(pip和Anaconda)

    这篇文章主要介绍了Python安装第三方库攻略(pip和Anaconda),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-10-10

最新评论