python仿evething的文件搜索器实例代码


Posted in Python onMay 13, 2019

今天看到everything搜索速度秒杀windows自带的文件管理器,所以特地模仿everything实现了文件搜索以及打开对应文件的功能,首先来一张搜索对比图。

这是evething搜索效果:

python仿evething的文件搜索器实例代码

这是自己实现的效果:

python仿evething的文件搜索器实例代码

主要功能就是python的os库的文件列表功能,sqllite创建表,插入数据以及模糊搜索,然后就是tkiner实现的界面功能。全部代码贴出来做一次记录,花费一天时间踩坑。

# coding=utf-8
import tkinter as tk
import tkinter.messagebox #这个是消息框,对话框的关键
import tkinter.constants
import sqlite3
import os
import threading
import traceback
 
def update_db():
  print("更新数据库")
  tkinter.messagebox.showerror("错误提示","更新数据库功能未完待续,可以删除目录下的allFiles.db文件,然后点击搜索,即可刷新数据库")
 
def mouseCallBack(*args):
  indexs = listb.curselection()
  index = int(indexs[0])
  print("index",index)
  start_directory = str(myArr[index])
  print(start_directory[2:-3])
  os.startfile(start_directory[2:-3])
 
def obtain_all_files(filepath,cursor):
#遍历filepath下所有文件,包括子目录
 try:
   files = os.listdir(filepath)
   for fi in files:
    fi_d = os.path.join(filepath,fi)
    if os.path.isdir(fi_d):
     obtain_all_files(fi_d,cursor)
    else:
     path = os.path.join(filepath,fi_d)
     update_progress.set(path)
     print("目录",path)
     sqlAdd = "insert into filepath (file_path) values ('"+path+"')"
     print("sqlAdd",sqlAdd)
     cursor.execute(sqlAdd)
 except Exception as e:
   traceback.print_exc()
   print("扫描文件出异常了,点击确定继续扫描")
   tkinter.messagebox.showerror("错误提示","扫描文件出异常了看,点击确定继续扫描")
 
 
 
 
def scan_file():
  print("开始扫描文件")
 #  del myArr[:]
  connection.execute("BEGIN TRANSACTION;") # 关键点
  cursor = connection.cursor()
  obtain_all_files('G:\\',cursor)
  print("G盘扫描完成...")
  tkinter.messagebox.showinfo("温馨提示","G盘扫描完成....")
  connection.execute("COMMIT;") #关键点
  connection.commit()
  connection.close()
 
 
def insert_db():
   t1 = threading.Thread(target=scan_file)
   t1.setDaemon(True)
   t1.start()
   tkinter.messagebox.showinfo("温馨提示","正在更新数据库,请等待...")
 
def search_file():
   #表示创建一个数据库,并获得连接
   print("数据库是否存在: ",isExistDB)
   if(isExistDB==False):
     tkinter.messagebox.showwarning("警告","数据库不存在,将更新数据库文件!")
     try:
       mycursor = connection.cursor()
       file_sql = "create table filepath('file_path' text not null)"
       mycursor.execute(file_sql)
       mycursor.close()
       insert_db()
     except:
       tkinter.messagebox.showerror("错误提示","数据库发生异常...")
       return
   else:
     print("开始搜索")
     listb.delete(0,tk.constants.END)
     mycursor = connection.cursor()
     entry_text = inputText.get()
     search_sql = "select * from filepath where file_path like '%"+entry_text+"%'"
     files = mycursor.execute(search_sql)
     #tkinter.messagebox.showwarning("警告","没有找到对应的文件!")
     for f in files:
      print(f)
      myArr.append(f)
      listb.insert(tkinter.constants.END,f)
     print("搜索完成")
     mycursor.close()
 
myArr = []
isExistDB = os.path.exists("allFiles.db")
connection = sqlite3.connect("allFiles.db",check_same_thread = False)
root = tk.Tk() # 初始化Tk()
root.title("电脑文件搜索工具(仿everything)By景兄弟V1.0")  # 设置窗口标题
root.geometry("800x600")  # 设置窗口大小 注意:是x 不是*
root.resizable(width=False, height=False) # 设置窗口是否可以变化长/宽,False不可变,True可变,默认为True
#设置输入框
inputText = tk.Entry(root,show=None,foreground = 'red',font = ('Helvetica', '15', 'bold'),insertbackground = 'green',width=65)
inputText.pack()
#设置按钮,以及放置的位置
searchBtn = tk.Button(root, text="搜索", fg="blue",bd=2,width=10,command=search_file)#command中的方法带括号是直接执行,不带括号才是点击执行
searchBtn.place(x=200, y=40, anchor='nw')
updateBtn = tk.Button(root, text="更新数据库", fg="blue",bd=2,width=10,command=update_db)
updateBtn.place(x=400, y=40, anchor='nw')
 
update_progress = tk.StringVar()
update_progress.set('还未开始扫描')
lb = tk.Label(root,text="还未开始", fg="blue",bd=2,width=100, textvariable=update_progress)
lb.place(x=20,y=90)
 
listb = tk.Listbox(root,width=110,height=20)
listb.place(x=1, y=120, anchor='nw')
sb = tk.Scrollbar(root)  #垂直滚动条组件
sb.pack(side=tkinter.constants.RIGHT,fill=tkinter.constants.Y) #设置垂直滚动条显示的位置
listb.config(yscrollcommand=sb.set)
listb.bind("<<ListboxSelect>>",mouseCallBack)
root.mainloop() # 进入消息循环

以上所述是小编给大家介绍的python仿evething的文件搜索器详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Python 相关文章推荐
Python 序列化 pickle/cPickle模块使用介绍
Nov 30 Python
python实现外卖信息管理系统
Jan 11 Python
使用pycharm生成代码模板的实例
May 23 Python
Tensorflow卷积神经网络实例进阶
May 24 Python
python实现决策树ID3算法的示例代码
May 30 Python
opencv python 傅里叶变换的使用
Jul 21 Python
python实现维吉尼亚算法
Mar 20 Python
python requests证书问题解决
Sep 05 Python
python快速排序的实现及运行时间比较
Nov 22 Python
使用Python串口实时显示数据并绘图的例子
Dec 26 Python
Python中文纠错的简单实现
Jul 07 Python
Python 数据可视化神器Pyecharts绘制图像练习
Feb 28 Python
python爬虫租房信息在地图上显示的方法
May 13 #Python
详解如何设置Python环境变量?
May 13 #Python
详解python运行三种方式
May 13 #Python
OpenCV图像颜色反转算法详解
May 13 #Python
搞清楚 Python traceback的具体使用方法
May 13 #Python
Python3+OpenCV2实现图像的几何变换(平移、镜像、缩放、旋转、仿射)
May 13 #Python
Python 通过打码平台实现验证码的实现
May 13 #Python
You might like
收藏的一个php小偷的核心程序
2007/04/09 PHP
PHP生成不重复标识符的方法
2014/11/21 PHP
php静态成员方法和静态的成员属性的使用方法
2017/10/26 PHP
设定php简写功能的方法
2019/11/28 PHP
javascript 不间断的图片滚动并可点击
2010/01/15 Javascript
JSDoc 介绍使用规范JsDoc的使用介绍
2011/02/12 Javascript
jQuery AjaxQueue改进步骤
2011/10/06 Javascript
JavaScript 5 新增 Array 方法实现介绍
2012/02/06 Javascript
Jquery实现自定义tooltip示例代码
2014/02/12 Javascript
每天一篇javascript学习小结(基础知识)
2015/11/10 Javascript
完美解决node.js中使用https请求报CERT_UNTRUSTED的问题
2017/01/08 Javascript
js实现简单的网页换肤效果
2017/01/18 Javascript
node.js中grunt和gulp的区别详解
2017/07/17 Javascript
JavaScript闭包的简单应用
2017/09/01 Javascript
浅谈使用React.setState需要注意的三点
2017/12/18 Javascript
vue-cli脚手架build目录下utils.js工具配置文件详解
2018/09/14 Javascript
Vue基础学习之项目整合及优化
2019/06/02 Javascript
JS去除字符串最后的逗号实例分析【四种方法】
2019/06/20 Javascript
小结Python用fork来创建子进程注意事项
2014/07/03 Python
Python实现的一个找零钱的小程序代码分享
2014/08/25 Python
简单实现python进度条脚本
2017/12/18 Python
彻彻底底地理解Python中的编码问题
2018/10/15 Python
Django模板之基本的 for 循环 和 List内容的显示方式
2020/03/31 Python
如何在Canvas中添加事件的方法示例
2019/05/21 HTML / CSS
全球酒店预订网站:Hotels.com
2016/08/10 全球购物
英语系本科生求职信范文
2013/12/18 职场文书
大学生自我鉴定范文
2013/12/28 职场文书
事业单位请假制度
2014/01/13 职场文书
《油菜花开了》教学反思
2014/02/22 职场文书
2014年最新学校运动会广播稿
2014/09/17 职场文书
党的群众路线教育实践活动批评与自我批评范文
2014/10/16 职场文书
2014年客房部工作总结
2014/11/22 职场文书
2014年招生工作总结
2014/11/26 职场文书
跑吧孩子观后感
2015/06/10 职场文书
导游词之千岛湖
2019/09/23 职场文书
MySQL数据库 安全管理
2022/05/06 MySQL