一、功能
模拟Everything,通过python+UI来实现可视化文件的高速查找。
二、运行效果
三、代码
import os
import threading
from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QLabel, QLineEdit, QTextBrowser, QPushButton, QComboBox
from PyQt5.QtGui import QFont
from PyQt5.QtCore import Qt, pyqtSignal, QObject
class FileSearchThread(QObject):
search_result_found = pyqtSignal(str)
search_finished = pyqtSignal()
def __init__(self, disk, search_text):
super().__init__()
self.disk = disk
self.search_text = search_text
self.found_files = []
def search_files(self):
for root, dirs, files in os.walk(self.disk):
for file in files:
if self.search_text.lower() in file.lower():
file_path = os.path.join(root, file)
self.found_files.append(file_path)
self.search_result_found.emit(file_path)
self.search_finished.emit()
class FileSearchApp(QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle('文件搜索')
self.setGeometry(200, 600, 1340, 800)
self.search_label = QLabel("搜索关键字:")
self.search_label.setFont(QFont('Arial', 12))
self.search_textbox = QLineEdit()
self.search_textbox.setFont(QFont('Arial', 12))
self.search_button = QPushButton('搜索')
self.search_button.setFont(QFont('Arial', 12))
self.search_button.clicked.connect(self.start_search)
self.search_results = QTextBrowser()
self.search_results.setFont(QFont('Arial', 12))
self.search_status_label = QLabel()
self.search_status_label.setFont(QFont('Arial', 12))
layout = QVBoxLayout()
layout.addWidget(self.search_label)
layout.addWidget(self.search_textbox)
layout.addWidget(self.search_button)
layout.addWidget(self.search_status_label)
layout.addWidget(self.search_results)
self.setLayout(layout)
def start_search(self,disks):
disks= ['C:','D:','E:','F:'] #本地电脑的磁盘列表
search_text = self.search_textbox.text()
# print(disk)
self.search_results.clear()
self.search_status_label.setText("正在搜索...")
self.search_status_label.adjustSize()
for disk in disks:
if disk and search_text:
file_search_thread = FileSearchThread(disk, search_text)
file_search_thread.search_result_found.connect(self.display_result)
file_search_thread.search_finished.connect(self.search_finished)
self.worker_thread = threading.Thread(target=file_search_thread.search_files)
self.worker_thread.start()
def display_result(self, file_path):
self.search_results.append(file_path)
def search_finished(self):
self.search_status_label.setText("搜索完成")
self.search_status_label.adjustSize()
self.worker_thread.join()
if __name__ == '__main__':
app = QApplication([])
file_search_app = FileSearchApp()
file_search_app.show()
app.exec_()