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 相关文章推荐
python3 破解 geetest(极验)的滑块验证码功能
Feb 24 Python
详解Python if-elif-else知识点
Jun 11 Python
Python3单行定义多个变量或赋值方法
Jul 12 Python
python 执行文件时额外参数获取的实例
Dec 18 Python
python3使用matplotlib绘制条形图
Mar 25 Python
基于腾讯云服务器部署微信小程序后台服务(Python+Django)
May 08 Python
Python实现的ftp服务器功能详解【附源码下载】
Jun 26 Python
python multiprocessing多进程变量共享与加锁的实现
Oct 02 Python
使用python写一个自动浏览文章的脚本实例
Dec 05 Python
PyCharm中Matplotlib绘图不能显示UI效果的问题解决
Mar 12 Python
python线程池如何使用
May 28 Python
Python中的Cookie模块如何使用
Jun 04 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
关于js和php对url编码的处理方法
2014/03/04 PHP
PHP实现过滤各种HTML标签
2015/05/17 PHP
微信公众平台DEMO(PHP)
2016/05/04 PHP
总结PHP如何获取当前主机、域名、网址、路径、端口和参数等
2016/09/09 PHP
PHP构造函数与析构函数用法示例
2016/09/28 PHP
PHP面向对象多态性实现方法简单示例
2017/09/27 PHP
PHP递归的三种常用方式
2019/02/28 PHP
php中array_fill函数的实例用法
2021/03/02 PHP
PHP常用字符串输出方法分析(echo,print,printf及sprintf)
2021/03/09 PHP
JS 巧妙获取剪贴板数据 Excel数据的粘贴
2009/07/09 Javascript
JavaScript高级程序设计(第3版)学习笔记2 js基础语法
2012/10/11 Javascript
javascript框架设计之浏览器的嗅探和特征侦测
2015/06/23 Javascript
JS 动态判断PC和手机浏览器实现代码
2016/09/21 Javascript
JS库之Highlight.js的用法详解
2017/09/13 Javascript
jQuery实现的页面弹幕效果【测试可用】
2018/08/17 jQuery
Vue实现移动端页面切换效果【推荐】
2018/11/13 Javascript
解决微信小程序中转换时间格式IOS不兼容的问题
2019/02/15 Javascript
JavaScript跳出循环的三种方法(break, return, continue)
2019/07/30 Javascript
VUEX-action可以修改state吗
2019/11/19 Javascript
Vue 中 filter 与 computed 的区别与用法解析
2019/11/21 Javascript
[45:59]EG vs OG 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/18 DOTA
python基础教程之面向对象的一些概念
2014/08/29 Python
python打开文件的方式有哪些
2020/06/29 Python
python实现AHP算法的方法实例(层次分析法)
2020/09/09 Python
用python读取xlsx文件
2020/12/17 Python
Alpine安装Python3依赖出现的问题及解决方法
2020/12/25 Python
HTTP状态码详解
2021/03/18 杂记
html5 分层屏幕适配的方法
2018/03/16 HTML / CSS
美国最大的在线生存商店:Survival Frog
2020/12/13 全球购物
十岁生日父母答谢词
2014/01/18 职场文书
高中军训感想300字
2014/03/04 职场文书
学生会部长竞聘书
2014/03/31 职场文书
公司行政专员岗位职责
2014/08/24 职场文书
2015国庆节宣传语
2015/07/14 职场文书
2016年情人节问候语
2015/11/11 职场文书
2016抗战胜利71周年红领巾广播稿
2015/12/18 职场文书