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模块用法实例分析
May 27 Python
用python的requests第三方模块抓取王者荣耀所有英雄的皮肤实例
Dec 14 Python
使用python对文件中的数值进行累加的实例
Nov 28 Python
Python基于Tkinter模块实现的弹球小游戏
Dec 27 Python
解决Python正则表达式匹配反斜杠''\''问题
Jul 17 Python
django使用admin站点上传图片的实例
Jul 28 Python
浅析python内置模块collections
Nov 15 Python
使用OpenCV获取图片连通域数量,并用不同颜色标记函
Jun 04 Python
pyMySQL SQL语句传参问题,单个参数或多个参数说明
Jun 06 Python
python GUI模拟实现计算器
Jun 22 Python
Django中template for如何使用方法
Jan 31 Python
Pytorch中的学习率衰减及其用法详解
Jun 05 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
CodeIgniter启用缓存和清除缓存的方法
2014/06/12 PHP
php调整服务器时间的方法
2015/04/03 PHP
php+mysql实现无限级分类
2015/11/11 PHP
超清晰的document对象详解
2007/02/27 Javascript
css图片自适应大小
2007/11/28 Javascript
Js实现双击鼠标自动滚动屏幕的示例代码
2013/12/14 Javascript
js触发select onchange事件的小技巧
2014/08/05 Javascript
使用bootstrap3开发响应式网站
2016/05/12 Javascript
JQuery 传送中文乱码问题的简单解决办法
2016/05/24 Javascript
原生js更改css样式的两种方式
2017/03/15 Javascript
详解Angular 4.x NgTemplateOutlet
2017/05/24 Javascript
JavaScript之排序函数_动力节点Java学院整理
2017/06/30 Javascript
在vue中使用echarts图表实例代码详解
2018/10/22 Javascript
如何将百度地图包装成Vue的组件的方法步骤
2019/02/12 Javascript
浅谈发布订阅模式与观察者模式
2019/04/09 Javascript
小程序如何在不同设备上自适应生成海报的实现方法
2019/08/20 Javascript
vue 实现模糊检索并根据其他字符的首字母顺序排列
2019/09/19 Javascript
vue动态禁用控件绑定disable的例子
2019/10/28 Javascript
[37:29]完美世界DOTA2联赛PWL S2 LBZS vs Forest 第二场 11.19
2020/11/19 DOTA
python实现分析apache和nginx日志文件并输出访客ip列表的方法
2015/04/04 Python
python UNIX_TIMESTAMP时间处理方法分析
2016/04/18 Python
浅谈numpy中linspace的用法 (等差数列创建函数)
2017/06/07 Python
Python使用微信SDK实现的微信支付功能示例
2017/06/30 Python
Python数据结构与算法之图的广度优先与深度优先搜索算法示例
2017/12/14 Python
python re模块匹配贪婪和非贪婪模式详解
2020/02/11 Python
Python判断字符串是否为空和null方法实例
2020/04/26 Python
pytorch cuda上tensor的定义 以及减少cpu的操作详解
2020/06/23 Python
HTML5 Canvas 破碎重组的视频特效的示例代码
2019/09/24 HTML / CSS
HTML5 Canvas+JS控制电脑或手机上的摄像头实例
2014/05/03 HTML / CSS
巴西独家产品和现场演示购物网站:Shoptime
2019/07/11 全球购物
内科护士实习自我鉴定
2013/10/17 职场文书
知识改变命运演讲稿
2014/05/21 职场文书
公司表扬信格式
2015/05/04 职场文书
2017年寒假社区服务活动总结
2016/04/06 职场文书
基于tensorflow权重文件的解读
2021/05/26 Python
Unicode中的CJK(中日韩统一表意文字)字符小结
2021/12/06 HTML / CSS