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 相关文章推荐
wxpython学习笔记(推荐查看)
Jun 09 Python
Django的URLconf中使用缺省视图参数的方法
Jul 18 Python
Python中动态检测编码chardet的使用教程
Jul 06 Python
Anaconda下安装mysql-python的包实例
Jun 11 Python
Python SVM(支持向量机)实现方法完整示例
Jun 19 Python
对django layer弹窗组件的使用详解
Aug 31 Python
Python数据处理篇之Sympy系列(五)---解方程
Oct 12 Python
pygame实现非图片按钮效果
Oct 29 Python
浅析python内置模块collections
Nov 15 Python
python通过移动端访问查看电脑界面
Jan 06 Python
Python基础之列表常见操作经典实例详解
Feb 26 Python
Python本地及虚拟解释器配置过程解析
Oct 13 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将网址字符串转换成超链接(网址或email)
2010/05/25 PHP
PHP合并数组+号和array_merge的区别
2015/06/25 PHP
PHP内存缓存功能memcached示例
2016/10/19 PHP
JS加ASP二级域名转向的代码
2007/05/17 Javascript
JavaScript 在各个浏览器中执行的耐性
2009/04/06 Javascript
原生JS实现表单checkbook获取已选择的值
2013/07/21 Javascript
JavaScript事件处理程序详解
2017/09/19 Javascript
Angular5集成eventbus的示例代码
2018/07/19 Javascript
浅谈vue方法内的方法使用this的问题
2018/09/15 Javascript
nodejs提示:cross-device link not permitted, rename错误的解决方法
2019/06/10 NodeJs
通过循环优化 JavaScript 程序
2019/06/24 Javascript
VUE实现移动端列表筛选功能
2019/08/23 Javascript
Vue图片浏览组件v-viewer用法分析【支持旋转、缩放、翻转等操作】
2019/11/04 Javascript
vue 使用微信jssdk,调用微信相册上传图片功能
2020/11/13 Javascript
Using Django with GAE Python 后台抓取多个网站的页面全文
2016/02/17 Python
Python异常对代码运行性能的影响实例解析
2018/02/08 Python
Python多进程写入同一文件的方法
2019/01/14 Python
使用PIL(Python-Imaging)反转图像的颜色方法
2019/01/24 Python
Python调用飞书发送消息的示例
2020/11/10 Python
appium+python自动化配置(adk、jdk、node.js)
2020/11/17 Python
pip install命令安装扩展库整理
2021/03/02 Python
Css3圆角边框制作代码
2015/11/18 HTML / CSS
总结30个CSS3选择器
2017/04/13 HTML / CSS
家乐福巴西网上超市:Carrefour巴西
2016/10/31 全球购物
Vans英国官方网站:美国南加州的原创极限运动潮牌
2017/01/20 全球购物
.NET面试10题
2014/02/24 面试题
系统管理员的职责包括那些?管理的对象是什么?
2013/01/18 面试题
土木工程师岗位职责
2013/11/24 职场文书
校园歌手大赛策划书
2014/01/17 职场文书
高中学生干部学习的自我评价
2014/02/21 职场文书
部队反四风对照检查材料
2014/09/26 职场文书
2014年客房服务员工作总结
2014/11/18 职场文书
不尊敬老师的检讨书
2014/12/21 职场文书
生日祝酒词大全
2015/08/10 职场文书
拔河比赛队名及霸气口号
2015/12/24 职场文书
思想品德课教学反思
2016/02/24 职场文书