Python 實現全盤文件搜索
1 簡介
配套軟件版本:Python 3.8+pycharm
功 能: 按照輸入的字符對全盤文件進行搜索,將包含輸入字符的文件名稱及其路徑顯示到界面中。
2 PyCharm&Pyqt的配置說明
2.1 模塊安裝
需要安裝模塊pyqt5,designer,
安裝方法:pip install pyqt5
pip install pyqt5-tools
2.2 按照以下步驟將安裝的模塊設置為external tools
步驟1:
打開PyCharm,選擇Settings -> Tools -> External Tools,點擊左上角的綠色加號。

步驟2:
Name填入QtDesigner(方便后續使用,名稱無所謂)。Program選擇我們安裝的PyQt5-tools下面的designer.exe。Working directory填$FileDir$。然后點擊OK,則添加了QtDesigner作為PyCharm的外置工具。

步驟3:
按照同樣的步驟添加PyUIC(UI轉換工具)。(PyUIC的Program為Python.exe,在Python的安裝目錄下面的Scripts目錄下,Working directory $FileName$,Arguments則填入如下代碼:
-m PyQt5.uic.pyuic $FileName$ -o $FileNameWithoutExtension$.py

步驟4:
最后添加pyrcc用於PyQt5的資源文件轉碼。具體配置與上述內容相同,Arguments填入:
$FileName$ -o $FileNameWithoutExtension$_rc.py

步驟5:
退出之前,點擊Apply保存配置。配置完成之后,PyCharm中會加入3個工具。
可以在Tools-》External Tools中查看
3 Desinger實現界面設置
步驟1:
打開Pycharm-》Tools-》External Tools-》Qt Designer-》選擇Main Window-》點擊創建。
步驟2:
從左邊的Widget Box中分別選擇添加Line Edit/Push Button/List Widget
步驟3:
手動調整大小&從上方的工具欄中,選擇參數
(不同的布局式,水平、垂直、表格)。將窗口調整為適合的布局。(按下ctl +R進行查看)
步驟4:選中步驟2的Widget,在右側的屬性編輯器中,編輯屬性。
如:QMainWindow的window Title:搜索本地文件

Pushbutton的快捷鍵:

步驟4:保存文件(.ui文件)
4 Py文件修改
步驟1:在Pycharm選中ui文件,右擊選擇External Tools->PyUIC-》將會在當前目錄中生成對應的py文件
步驟2:main文件中import步驟1中檔的py文件,並在main中添加如下命令,點擊運行,查看是否第3中的窗口。
app = QApplication(sys.argv)
MainWindow = QMainWindow()
ui = everything.Ui_MainWindow()
ui.setupUi(MainWindow)
MainWindow.show()
sys.exit(app.exec_())
5 實現文件搜索
我們新建一個 ()的方法search_slot(),將其作為按鈕點擊信號的槽函數。
def search_slot(self):
start_time = time.time()
print(start_time)
kw = self.lineEdit.text() # 獲取搜索詞
self.listWidget.clear()
t = []
for i in range(65, 91):
vol = chr(i) + ':'
if os.path.isdir(vol):
for root, dirs, files in os.walk(vol, topdown=1):
for name in files:
if kw in name:
# print(os.path.join(root, name))
pa1 = os.path.join(root, name)
t.append(pa1)
f = QtWidgets.QListWidgetItem(pa1) # 創建一個搜索結果項
self.listWidget.addItem(f)
end_time = time.time()
print(f'程序運行耗時:{(end_time - start_time):.2f}s')
接着將按鈕的點擊信號進行綁定:
self.pushButton.clicked.connect(self.search_slot)
選中文件:
def click_slot(self):
print(self.listWidget.currentItem().text())
os.startfile(str(self.listWidget.currentItem().text()))
打開文件:
self.listWidget.itemClicked['QListWidgetItem*'].connect(self.click_slot)
6 不足,待優化
無法對搜索結果操作,(打開、打開路徑、刪除)
