python之tkinter使用-文件系统遍历,, 1 # tkin


  1 # tkinter:文件系统遍历  2 import tkinter as tk, os  3 from time import sleep  4   5   6 class DirList(object):  7     def __init__(self, initdir=os.curdir):  8         self.top = tk.Tk()  9         self.top.title(‘查找‘) 10  11         self.top.geometry(‘400x500‘)  # 设置窗口大小 12         self.label = tk.Label(self.top, text=‘文件列表‘, font=(‘宋体 -16 bold‘)) 13         self.label.pack() 14  15         # StringVar:字符串变量,特点是跟踪变量变化,及时显示在界面上 16         self.cwd = tk.StringVar(self.top) 17         self.cwd.set(initdir) 18  19         # 当前目录显示标签 20         self.dirl = tk.Label(self.top, fg=‘blue‘, font=(‘Helvetica -14 bold‘)) 21         self.dirl.pack() 22  23         # 新建框体容器,存放文件列表和滚动条 24         self.dirfm = tk.Frame(self.top) 25         # 滚动条 26         self.dirsb = tk.Scrollbar(self.dirfm) 27         self.dirsb.pack(side=tk.RIGHT, fill=tk.Y) 28         # 列表框 29         self.dirs = tk.Listbox(self.dirfm, height=23, width=60, 30                                font=(‘Helvetica -14‘), 31                                yscrollcommand=self.dirsb.set) 32         # 绑定setDirAndGo函数 33         self.dirs.bind(‘<Double-1>‘, self.setDirAndGo) 34         # 滑动框与列表关联 35         self.dirsb.config(command=self.dirs.yview) 36         self.dirs.pack(side=tk.LEFT, fill=tk.X) 37         self.dirfm.pack(fill=tk.BOTH) 38  39         # 输入框 40         self.dirn = tk.Entry(self.top, width=60, font=(‘Helvetica -14‘), 41                              textvariable=self.cwd) 42         # 监听回车事件,绑定doLS函数,函数必须要有event参数 43         self.dirn.bind(‘<Return>‘, self.doLS) 44         self.dirn.pack(fill=tk.BOTH) 45  46         # 功能按钮框架包括三个按钮:清除、查询和退出。 47         self.bfm = tk.Frame(self.top) 48         self.clr = tk.Button(self.bfm, text=‘清除‘, width=6, command=self.clrDir, 49                              activeforeground=‘white‘, activebackground=‘blue‘) 50         self.ls = tk.Button(self.bfm, text=‘查询‘, width=6, command=self.doLS, 51                             activeforeground=‘white‘, activebackground=‘green‘) 52         self.quit = tk.Button(self.bfm, text=‘退出‘, width=6, command=self.top.quit, 53                               activeforeground=‘white‘, activebackground=‘red‘) 54         self.clr.pack(side=tk.LEFT, fill=tk.BOTH) 55         self.ls.pack(side=tk.LEFT, fill=tk.BOTH) 56         self.quit.pack(side=tk.LEFT, fill=tk.BOTH) 57         self.bfm.pack() 58  59     def clrDir(self, ev=None): 60         ‘‘‘清空文件路径输入框‘‘‘ 61         self.cwd.set(‘‘) 62  63     def setDirAndGo(self, ev=None): 64         ‘‘‘设置文件路径并查询‘‘‘ 65         self.last = self.cwd.get() 66         # 选中项背景默认为红色,后续修改为蓝色 67         self.dirs.config(selectbackground=‘red‘) 68         # 获取文件列表中选择项,没有选则输入框设置为当前目录路径 69         try: 70             # 获取目录列表中选中的文件名 71             check = self.dirs.get(self.dirs.curselection()) 72         except: 73             print("没有文件或文件错误!") 74             return 75  76         if not check: 77             check = os.curdir 78         self.cwd.set(check) 79         self.doLS() 80  81     def doLS(self, event=‘‘): 82         ‘‘‘ 83         查询文件路径 84         :param event:输入框回车事件触发参数 85         :return:无 86         ‘‘‘ 87         error = ‘‘ 88         tdir = self.cwd.get() 89         if not tdir: 90             tdir = os.curdir 91  92         # 判断输入框中文件是否存在 93         if not os.path.exists(tdir): 94             error = tdir + ‘: no such file!‘ 95         # 若文件存在,再判断是否是目录 96         elif not os.path.isdir(tdir): 97             error = tdir + ‘ is not directory!‘ 98  99         if error:100             ‘‘‘出现错误则提示在输入框内,2秒后还原‘‘‘101             self.dirn.config(fg=‘red‘)  # 输入框提示文字变为红色102             self.cwd.set(error)103             self.top.update()104             sleep(2)105             if not (hasattr(self, ‘last‘) and self.last):106                 ‘‘‘使用hasattr函数判断对象是否含有last属性或方法‘‘‘107                 self.last = os.curdir108             self.cwd.set(self.last)109             self.dirs.config(selectbackground=‘LightSkyBlue‘)110             self.dirn.config(fg=‘black‘)  # 输入框文字颜色还原111             self.top.update()112             return113 114         self.cwd.set(‘FETCHING DIRECTORY CONTENTS...‘)115         self.top.update()116 117         ‘‘‘目录列表框操作‘‘‘118         self.dirs.delete(0, tk.END)  # 清空目录列表119         # self.dirs.insert(tk.END, os.curdir) # 添加当前目录"."120         self.dirs.insert(tk.END, os.pardir)  # 添加上级目录".."121 122         ‘‘‘获取指定目录下的文件,在列表控件展示‘‘‘123         dirlist = os.listdir(tdir)124         dirlist.sort()125         os.chdir(tdir)  # 改变目录到指定路径126         for eachFlie in dirlist:127             self.dirs.insert(tk.END, eachFlie)128         self.cwd.set(os.getcwd())  # 在输入框中显示当前绝对路径129         self.dirl.config(text=os.getcwd())  # 上方标签显示当前路径130         self.dirs.config(selectbackground=‘LightSkyBlue‘)  # 选中时背景色为蓝色131         self.last = self.cwd.get()  # 记录最后一次路径132 133 134 def main():135     DirList(‘D:\\‘)136     tk.mainloop()137 138 139 if __name__ == ‘__main__‘:140     main()

截图:

技术分享

python之tkinter使用-文件系统遍历

评论关闭