需求来源
在目前的工作中,需要经常打开特定的几个文件夹检索自己需要的文件,由于在每次重新检索时都要重新回到桌面上点击文件夹搜索,所以效率很低,同时很烦人(由于有时需要同时检索几个相关的文件,不可能只打开一个窗口,所以使用单一的常驻窗口的方法也不太可行)。基于上述的这种情况,我打算整合这几个路径去做一个常用路径的搜索窗口,这样每次检索的时候就不需要再去打开特定的文件夹,或许这样会方便一些。文章记录自己的工作之后的一些学习,作为学习日记。
程序编写
由于电脑装有python,于是尝试使用python解决这个问题
程序的运作思路
界面使用python 中的tkinter库,编写,主要应该是由文件夹名称,搜索框和按钮三部分组成
其次在往搜索框中填入关键词时调用windows中的文件检索功能,检索文件,并且打开搜索窗口显示结果(因为文件包含pdf,文档,图片等多种类型,目前不知道如何去建造一个更好的预览类型解决这个问题,所以只能利用系统自带的功能解决)
程序
from tkinter import *
import subprocess
import tkinter.messagebox as msg
root = Tk()
root.columnconfigure(0, weight=1)
a = list()
a = ['一', '二', '三', '四']
entry_list = []
def query_file(button_name):
query_string = entry_list[button_name].get()
if button_name==0:
local_path = r'F:\learn,include,' # r is raw for dealing with backslashes
elif button_name==1:
local_path = r'F:\电子书,include,' # r is raw for dealing with backslashes
elif button_name == 2:
local_path = r'F:\迅雷下载,include,' # r is raw for dealing with backslashes
elif button_name == 3:
local_path = r'F:\Program Files (x86),include,' # r is raw for dealing with backslashes
else:
msg.showinfo('您点击了', button_name)
#network_path = r'\\your\network\fold\path'
# for a network location
# subprocess.Popen(f'explorer /root,"search-ms:query={query_string}&crumb=location:{network_path}&"')
# for a local folder
subprocess.Popen(f'explorer /root,"search-ms:query={query_string}&crumb=location:{local_path}&"')
def cbClicked(cbname):
print(entry_list[cbname].get())
msg.showinfo('您点击了', cbname)
for i in range(len(a)):
num = i + 1
var_label = 'L' + str(num)
var_label = Label(root, text=a[i])
'''创建第一列的标签'''
var_entry = 'E' + str(num)
var_filename = 'N' + str(num)
var_filename = StringVar()
var_filename.set('*')
var_entry = Entry(root, textvariable=var_filename)
entry_list.append(var_entry)
''''创建第二列的文本框'''
var_command = 'E' + str(num)
var_command = Button(root, text='search', command=lambda arg=i: query_file(arg))
''''创建第三列的按键'''
var_command.grid(row=i, column=2, sticky=N + S + W + E)
var_entry.grid(row=i, column=1, sticky=N + S + W + E)
var_label.grid(row=i, column=0, sticky=N + S + W + E)
root.mainloop()
在编写时遇到的问题
- 我被如何使得控件随着窗体变化而变化难住了#没有解决
GUI界面已经创建完成,下面打算导入功能,首先是打开window资源管理器 - 搜索完成,代码来自于Stack Overflow,但是问题是现在不能实现在特定的文件夹搜索,问题解决,统一使用location 即可
import subprocess
query_string = 'file_name.png'
local_path = r'C:\Users\your_name\Pictures' # r is raw for dealing with backslashes
network_path = r'\\your\network\fold\path'
# for a network location
subprocess.Popen(f'explorer /root,"search-ms:query={query_string}&crumb=location:{network_path}&"')
#for a local folder
subprocess.Popen(f'explorer /root,"search-ms:query={query_string}&crumb=folder:{local_path}&"')
- 问题如何绑定动态参数,换了一个思路解决,通过将所有的Entry控件存在一个数组调用解决,问题初步解决
深入
- 完善 GUI界面,使得在拉大整个窗口时,控件能够同时变大
- 阅读subprocess文档,尝试理解原理
- 暂定
备注
文章仅供参考