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