import sys
from PyQt5.QtWidgets import *
from PyQt5.QtGui import QIcon,QStandardItem,QStandardItemModel
from PyQt5.QtCore import QSize
from PyQt5.Qt import *
from File import *
import time
import os
import pickle
from MyWidget import MyListWidget
from fileEdit import editForm,attributeForm
#主窗体
class mainForm(QMainWindow):
def __init__(self):
super().__init__()
"""
读取文件
"""
self.readFile()
#根目录
self.curNode=self.catalog[0]
self.rootNode=self.curNode
self.baseUrl=['root']
"""
窗体基本信息
"""
self.resize(1200,800)
self.setWindowTitle('操作系统项目3之文件管理')
self.setWindowIcon(QIcon('img/folder.ico'))
#窗口居中
qr=self.frameGeometry()
centerPlace=QDesktopWidget().availableGeometry().center()
qr.moveCenter(centerPlace)
self.move(qr.topLeft())
#窗口布局
grid=QGridLayout()
grid.setSpacing(10)
self.widGet=QWidget()
self.widGet.setLayout(grid)
self.setCentralWidget(self.widGet)
#退出事件
exitAction = QAction(QIcon('file.png'), '直接退出', self)
exitAction.setShortcut('Ctrl+Q')
exitAction.triggered.connect(qApp.quit)
#菜单栏
menubar=self.menuBar()
#添加菜单
fileMenu=menubar.addMenu('文件')
#添加事件
fileMenu.addAction(exitAction)
menubar.addAction('格式化', self.format)
menubar.addAction('说明', self.introduction)
"""
添加工具栏
"""
#返回键
self.backAction=QAction(QIcon('img/back.png'), '&返回',self)
exitAction.setShortcut('Ctrl+E')
self.backAction.triggered.connect(self.backEvent)
self.toolBar=self.addToolBar('工具栏')
self.toolBar.addAction(self.backAction)
self.backAction.setEnabled(False)
#前进键
self.forwardAction=QAction(QIcon('img/forward.png'), '&前进',self)
self.forwardAction.triggered.connect(self.forwardEvent)
self.toolBar.addAction(self.forwardAction)
self.forwardAction.setEnabled(False)
self.toolBar.addSeparator()
#当前所在路径
self.curLocation=QLineEdit()
self.curLocation.setText('> root')
self.curLocation.setReadOnly(True)
#图标
self.curLocation.addAction(QIcon('img/folder.png'), QLineEdit.LeadingPosition)
self.curLocation.setMinimumHeight(40)
ptrLayout=QFormLayout()
ptrLayout.addRow(self.curLocation)
ptrWidget=QWidget()
ptrWidget.setLayout(ptrLayout)
ptrWidget.adjustSize()
#设置自动补全
self.toolBar.addWidget(ptrWidget)
self.toolBar.setMovable(False)
"""
左侧地址栏
"""
#左侧的地址栏
self.tree=QTreeWidget()
#设置列数
self.tree.setColumnCount(1)
#设置标题
self.tree.setHeaderLabels(['地址'])
#建树
self.buildTree()
#设置选中状态
self.tree.setCurrentItem(self.rootItem)
#设置当前路径
self.treeItem=[self.rootItem]
#绑定单击事件
self.tree.itemClicked['QTreeWidgetItem*','int'].connect(self.clickTreeItem)
grid.addWidget(self.tree,1,0)
"""
文件基本信息
"""
self.listView=MyListWidget(self.curNode,parents=self)
self.listView.setMinimumWidth(800)
self.listView.setViewMode(QListView.IconMode)
self.listView.setIconSize(QSize(72,72))
self.listView.setGridSize(QSize(100,100))
self.listView.setResizeMode(QListView.Adjust)
self.listView.setMovement(QListView.Static)
self.listView.setEditTriggers(QAbstractItemView.AllEditTriggers)
self.listView.doubleClicked.connect(self.openFile)
#加载当前路径文件
self.loadCurFile()
grid.addWidget(self.listView, 1, 1)
"""
右击菜单
"""
self.listView.setContextMenuPolicy(Qt.CustomContextMenu)
self.listView.customContextMenuRequested.connect(self.show_menu)
"""
美化
"""
self.updatePrint()
self.lastLoc=-1
#删除文件快捷键
QShortcut(QKeySequence(self.tr("Delete")), self, self.deleteFile)
def introduction(self):
QMessageBox.about(self, '说明',
'本项目为软件学院2019级操作系统课程项目3的文件管理\n\n'+
'项目通过模拟FAT表、多级目录结构等文件管理中使用的策略,完成了一个基本的文件管理系统\n'+
'-----------------------------------------\n'+
'打开文件:右击选中或者双击打开文件\n'+
'删除文件:右击选中或者通过Delete快捷键删除文件\n'+
'左侧地址栏:查看多级目录结构,并且能够在此点击快速跳转\n'+
'属性:选中文件右击可以查看该文件属性,不选中可以查看当前所在文件夹的属性\n'+
'新建文件:右击选中即可新建文件或文件夹\n'+
'重命名:右击选中需要重命名的文件或文件夹即可重命名\n'+
'格式化:清空所有内容\n'+
'导航栏:查看当前所在路径\n'+
'后退/前进:返回上一级目录/前往上一步去过的目录\n'+
'-----------------------------------------\n'+
'学号:1851055\n'+
'姓名:汪明杰')
def clickTreeItem(self,item,column):
ways=[item]
#查看所在层数
level=0
temp=item
while temp.parent()!=None:
temp=temp.parent()
ways.append(temp)
level+=1
ways.reverse()
#回退到根节点
while self.backEvent():
pass
self.baseUrl=self.baseUrl[:1]
self.treeItem=self.treeItem[:1]
#一步一步前进
for i in ways:
if i==self.rootItem:
continue
#前往该路径
#从curNode中查询item
newNode=None
for j in self.curNode.children:
if j.name==i.text(0):
newNode=j
break
#前往路径j
if newNode.isFile:
#文件的话,break即可
break
else:
self.curNode=newNode
self.updateLoc()
self.baseUrl.append(newNode.name)
#更新路径
for j in range(self.treeItem[-1].childCount()):
if self.treeItem[-1].child(j).text(0)==newNode.name:
selectedItem=self.treeItem[-1].child(j)
self.treeItem.append(selectedItem)
self.tree.setCurrentItem(selectedItem)
#更新下标
self.updatePrint()
if self.curNode!=self.rootNode:
self.backAction.setEnabled(True)
self.forwardAction.setEnabled(False)
self.lastLoc=-1
def updateLoc(self):
self.loadCurFile()
self.listView.curNode=self.curNode
#打开文件
def openFile(self,modelindex: QModelIndex)->None:
#获取点击item
self.listView.close_edit()
try:
item = self.listView.item(modelindex.row())
except:
#报错,则说明是右键打开方式
if len(self.listView.selectedItems())==0:
return
item=self.listView.selectedItems()[-1]
#如果可以前进
if self.lastLoc!=-1 and self.nextStep:
item=self.listView.item(self.lastLoc)
self.lastLoc=-1
self.forwardAction.setEnabled(False)
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
【资源说明】 课程作业基于Python实现的简单的文件系统源码+项目说明+详细注释.zip 本项目实现了以下的功能: - **界面展示详实** 界面左侧展示了多级目录结构,上部则展示了当前所在路径,右侧是当前目录下的文件的展示。 - **文件的管理** 本项目通过显示链接(FAT表)的方法对文件存储空间进行管理,而文件目录采用多级目录结构,每一项包括了文件名、物理地址、创建时间、修改时间等信息。 - **功能全面** 系统提供了新建文件(夹)、删除文件(夹)、重命名、查看属性、格式化等多种功能 - **使用简易** 用户可以通过双击打开文件,也可以右击打开;可以直接双击文件夹进入下一级目录,也可以通过左侧的多级目录直接跳转。 ### 项目环境 - **开发环境** Python 3.8 - **运行方法** 1. 直接运行:双击打开可执行文件/文件管理.exe 2. 代码运行:通过Python运行代码/main.py 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载使用,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可直接用于毕设、课设、作业等。 欢迎下载,沟通交流,互相学习,共同进步!
资源推荐
资源详情
资源评论
收起资源包目录
课程作业基于Python实现的简单的文件系统源码+项目说明+详细注释.zip (17个子文件)
项目说明.md 4KB
disk 9KB
fileEdit.py 5KB
main.py 25KB
File.py 4KB
img
folder.png 4KB
folder.ico 3KB
file.png 5KB
disk.png 10KB
forward.png 5KB
back.png 5KB
folderWithFile.png 4KB
create.png 6KB
attribute.png 9KB
catalog 1004B
fat 3KB
MyWidget.py 4KB
共 17 条
- 1
资源评论
Make程序设计
- 粉丝: 5633
- 资源: 3568
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- Surfer,线性函数
- MyBatis 的动态 SQL 是其核心特性之一.txt
- 时代的sdddsddsddsd
- 基于哈希链表的简单人员信息管理系统
- 其他类别JdonFramework开源框架 v5.1 Build20071025-jdonframework-5.1.rar
- 2001~2022年上市公司数字赋能指数.dta
- 2001~2022年上市公司数字赋能指数.xlsx
- 信息办公石大在线财务管理系统(含源码)-shidacaiwu.rar
- 信息办公电信计费系统完整代码-netctossconformity.rar
- matlab实现TD-SCDMA中初始同步捕捉DwPTS下行同步导频时隙的仿真.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功