# -*- coding:utf-8 -*- # 跨平台的文件搜索工具 from Tkinter import * import tkMessageBox import tkFileDialog import os import fnmatch from ScrolledText import ScrolledText def func(): str1 = ent1.get()#得到输入框内的值 str2 = ent2.get() if not (str1 and str2) : #信息框的标题和内容 tkMessageBox.showinfo('温馨提示','请先输入查询的关键字和文件类型再选择文件夹') return fn = tkFileDialog.askdirectory()#选择一个文件夹的路径 if not fn: return else: listbox.delete(0,END)#删除之前的值,从0到END fnList = os.walk(fn)# 获取当前路径,当前路径下的目录,以及文件 for root,dirs,files in fnList: for i in fnmatch.filter(files,str2):#过滤出以str2为结尾的files f = open(root + '/' + i).read() if str1 in f: # 如果str1在这个文件中,则将路径插入 listbox.insert(END,root+'/'+i)#将路径插入到末尾 def func2(e): if not listbox.curselection():#取双击的坐标 return window = Tk() window.title('文件查看') #window.geometry('600X200+600+300') text = ScrolledText(window,width=100)#带滚动条的多行文本框 text.grid() # 获取点击的值 path = listbox.get(listbox.curselection(),last=None) fn = open(path) text.insert(END,fn.read())#从末尾插入 fn.close() root = Tk() #创建一个窗口 root.title('文件搜索器')# 窗口的标题 root.geometry('+600+300')# 窗口的大小、位置 Label(root,text='关键词').grid()# 控件,布局方式有两种:网格式和 ent1 = Entry(root)# 输入框 ent1.grid(row=0,column=1) Label(root,text='文件类型').grid(row=0,column=2) ent2 = Entry(root) ent2.grid(row=0,column=3) btn = Button(root,text='选择文件',command=func)#创建一个按钮 btn.grid(row=0,column=4) #var1 = StringVar() listbox = Listbox(root,width=80)# 创建一个列表框控件,绑定一个变量 listbox.bind('<Double-Button-1>',func2) #绑定一个双击触发事件 listbox.grid(row=1,column=0,columnspan=5)#columnspan能让一个控件跨过多个控件的范围 root.mainloop()# 消息循环 #GUI程序开发过程中,1界面的开发;2完善功能; #事件:某个动作触发某个方法
效果图:
双击第一个文件: