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中用于去除空格的三个函数的使用小结
Apr 07 Python
请不要重复犯我在学习Python和Linux系统上的错误
Dec 12 Python
利用Python脚本实现ping百度和google的方法
Jan 24 Python
Python爬虫实现网页信息抓取功能示例【URL与正则模块】
May 18 Python
Python算术运算符实例详解
May 31 Python
Python 快速实现CLI 应用程序的脚手架
Dec 05 Python
Python中支持向量机SVM的使用方法详解
Dec 26 Python
Python实现查找二叉搜索树第k大的节点功能示例
Jan 24 Python
Python-接口开发入门解析
Aug 01 Python
Python中用pyinstaller打包时的图标问题及解决方法
Feb 17 Python
python UDF 实现对csv批量md5加密操作
Jan 01 Python
python 实现Requests发送带cookies的请求
Feb 08 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设置一边执行一边输出结果的代码
2013/09/30 PHP
PHP读取文件内容的五种方式
2015/12/28 PHP
关于js获取radio和select的属性并控制的代码
2011/05/12 Javascript
精通Javascript系列之Javascript基础篇
2011/06/07 Javascript
jquery text(),val(),html()方法区别总结
2013/11/04 Javascript
innerHTML动态添加html代码和脚本兼容多个浏览器
2014/10/11 Javascript
RequireJS 依赖关系的实例(推荐)
2017/01/21 Javascript
EasyUI框架 使用Ajax提交注册信息的实现代码
2017/09/27 Javascript
JS设计模式之数据访问对象模式的实例讲解
2017/09/30 Javascript
React 实现车牌键盘的示例代码
2019/12/20 Javascript
vue中利用iscroll.js解决pc端滚动问题
2020/02/15 Javascript
vue.js this.$router.push获取不到params参数问题
2020/03/03 Javascript
[01:42]辉夜杯战队访谈宣传片—FANTUAN
2015/12/25 DOTA
[30:00]完美世界DOTA2联赛PWL S2 Rebirth vs LBZS 第二场 11.28
2020/12/01 DOTA
Python本地与全局命名空间用法实例
2015/06/16 Python
Python tkinter的grid布局及Text动态显示方法
2018/10/11 Python
配置 Pycharm 默认 Test runner 的图文教程
2018/11/30 Python
python pip安装包出现:Failed building wheel for xxx错误的解决
2019/12/25 Python
python实现与redis交互操作详解
2020/04/21 Python
python怎么判断素数
2020/07/01 Python
Python 添加文件注释和函数注释操作
2020/08/09 Python
你不知道的葡萄干处理法、橙蜜处理法、二氧化碳酵母法
2021/03/17 冲泡冲煮
浅谈css3新单位vw、vh、vmin、vmax的使用详解
2017/12/01 HTML / CSS
突袭HTML5之Javascript API扩展1—Web Worker异步执行及相关概述
2013/01/31 HTML / CSS
Html5 audio标签样式的修改
2016/01/28 HTML / CSS
HTML5 实现图片上传预处理功能
2020/02/06 HTML / CSS
值传递还是引用传递
2015/02/08 面试题
保安自我鉴定范文
2013/12/08 职场文书
入党积极分子思想汇报范文
2014/01/05 职场文书
竞聘演讲稿怎么写
2014/08/28 职场文书
开发房地产协议书
2014/09/14 职场文书
2014年镇党建工作汇报材料
2014/11/02 职场文书
2015年中个人总结范文
2015/03/10 职场文书
幸福终点站观后感
2015/06/04 职场文书
Go语言中break label与goto label的区别
2021/04/28 Golang
MySQL数据库实验实现简单数据库应用系统设计
2022/06/21 MySQL