Python GUI项目:文件夹管理系统

文件夹管理系统,顾名思义是对于文件夹内部内容的管理和展示。在手机和电脑应用中使用广泛。在移动手机中,某个应用需要查找手机存储资料,会嵌入文件夹管理的功能,比如本地阅读器。电脑应用中,也经常用到这个功能,在本篇博客中,我将使用系统模块os调用文件夹的相关功能,使用python的tkinter模块进行文件夹遍历展示。关于tkinter模块的基本介绍请看上一篇博客内容

需求:

结合Tkinter模块中常用控件的特点,完成电脑应用程序文件夹管理界面,效果图如下:

涉及的知识点:

  • Tkinter常见控件的基本使用,其中涉及到的控件有:Label,Entry,ListBox等
  • 摆放控件可使用相对布局,或者绝对布局以及表格布局
  • 界面布局内容比较多时,可以使用Frame划分区域

实现功能代码:如图所示分为左右两个部分,所以我们使用Frame进行划分左右两个区域。

右边比较简单,先绘制右边所属的类。


import tkinter
from tkinter import ttk
class InfoWindows(tkinter.Frame):
    # 构造函数,传入其所属的master界面
    def __init__(self,master):
        # 生成当前类所属Frame,并使用表格布局设置器放置位置
        frame = tkinter.Frame(master)
        frame.grid(row=0,column=1)
        # 设置接收用户输入的Entry控件,并绑定变量
        self.ev = tkinter.Variable()
        self.entry = tkinter.Entry(frame,textvariable=self.ev)
        self.entry.pack()
        # 设置大文本控件
        self.txt = tkinter.Text(frame)
        self.txt.pack()

左边是树形图机构,可使用TreeView控件表示,左边选中内容会改变右边Entry的内容。所以传入右边窗口对象。

import tkinter
from tkinter import ttk
import os
#想让Treewindows作为控件显示在窗口中,作为容器
class TreeWindows(tkinter.Frame):
    #master :因为这个frame 存在与某一个窗口当中,而这个窗口可能还有其他的控件,所以需要通过构造方法传值。
    # path :表示需要遍历的目录   
    # 如果这个窗口的数值可能改变其他窗口,就需要把其他窗口通过构造方法传入进来。
    def __init__(self,master,path,otherwindow):
       fram = tkinter.Frame(master)
       fram.grid(row=0,column=0)
       self.otherwindow = otherwindow
        #创建一个树状图
       self.tree = ttk.Treeview(fram)
       self.tree.pack(side = tkinter.LEFT,fill = tkinter.Y)

       tempPath = self.getLastPath(path)
       #print(tempPath)
       root = self.tree.insert("","end",text=tempPath,values=(path))

       self.loadTree(path,root)
       #滚动条
       self.sy = tkinter.Scrollbar(fram)
       self.sy.pack(side=tkinter.RIGHT,fill = tkinter.Y)
       self.sy.config(command=self.tree.yview)
       self.tree.config(yscrollcommand=self.sy.set)
        #绑定一下树枝被选中的事件
       self.tree.bind("<<TreeviewSelect>>",self.func)

    def func(self,event):
        self.v = event.widget.selection()    #获得被选中的项
        for sv in self.v:
            filename = self.tree.item(sv)['text']
            path = self.tree.item(sv)['values']
            self.otherwindow.ev.set(filename)
            print(path)

    #加载指定的文件夹当中的文件,并且把它插入到树枝当中
    def loadTree(self,parentPath,root):
        #获取一个文件夹当中所有的元素
        filelist = os.listdir(parentPath)
        for filename in filelist:
            absPath = os.path.join(parentPath,filename)
            #插入树枝
            treey = self.tree.insert(root,'end',text=filename,values=(absPath))
            #判断路径是否是文件夹
            if os.path.isdir(absPath):
                self.loadTree(absPath,treey)

    #获取整个目录当中最后的名称
    def getLastPath(self,path):
        pathlist = os.path.split(path)
        return pathlist[-1]

然后在新的python文件中,对于左边和右边的模块进行整合放置。

import tkinter
from treeWindow import TreeWindows
from infoWindow import InfoWindows
win = tkinter.Tk()
win.title('可视化文件夹遍历')
win.geometry('600x400')
path = r'E:\py_workspace'
inwindow = InfoWindows(win)
twindow = TreeWindows(win,path,inwindow)
win.mainloop()

引入树形窗口和信息窗口,完成了整体项目的整合,并且能够完成相关文件夹的遍历管理,只需要改变path变量对应的路径信息,运行就可以使用了。

相关代码下载地址:https://download.csdn.net/download/u012156341/11140877

感谢您的阅读!

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值