当前位置: 代码网 > it编程>前端脚本>Python > 基于Python自制一个资源管理器

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

2025年02月19日 Python 我要评论
本文为大家详细介绍了如何基于python制作一个资源管理器,可以进行简单的本地资源管理,有需要的可以参考下最终效果图完整代码import sysfrom pyqt5.qtwidgets import

本文为大家详细介绍了如何基于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资源管理器内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com