Python+PyQt手搓一個文件瀏覽器
更新時間:2025年02月14日 15:33:16 作者:蹦蹦跳跳真可愛589
這篇文章主要為大家詳細介紹了Python如何利用PyQt手搓一個文件瀏覽器,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下
一、效果展示

二、界面設計
該界面通過Qt Designer設計
# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'file_web.ui'
#
# Created by: PyQt5 UI code generator 5.15.9
#
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again. Do not edit this file unless you know what you are doing.
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_Form(object):
def setupUi(self, Form):
Form.setObjectName("Form")
Form.resize(565, 459)
self.verticalLayoutWidget = QtWidgets.QWidget(Form)
self.verticalLayoutWidget.setGeometry(QtCore.QRect(10, 10, 551, 441))
self.verticalLayoutWidget.setObjectName("verticalLayoutWidget")
self.verticalLayout = QtWidgets.QVBoxLayout(self.verticalLayoutWidget)
self.verticalLayout.setContentsMargins(0, 0, 0, 0)
self.verticalLayout.setObjectName("verticalLayout")
self.horizontalLayout = QtWidgets.QHBoxLayout()
self.horizontalLayout.setObjectName("horizontalLayout")
self.back_btn = QtWidgets.QPushButton(self.verticalLayoutWidget)
self.back_btn.setMinimumSize(QtCore.QSize(40, 40))
font = QtGui.QFont()
font.setPointSize(15)
self.back_btn.setFont(font)
self.back_btn.setObjectName("back_btn")
self.horizontalLayout.addWidget(self.back_btn)
self.lineEdit = QtWidgets.QLineEdit(self.verticalLayoutWidget)
font = QtGui.QFont()
font.setPointSize(15)
self.lineEdit.setFont(font)
self.lineEdit.setObjectName("lineEdit")
self.horizontalLayout.addWidget(self.lineEdit)
self.verticalLayout.addLayout(self.horizontalLayout)
self.listWidget = QtWidgets.QListWidget(self.verticalLayoutWidget)
self.listWidget.setObjectName("listWidget")
self.verticalLayout.addWidget(self.listWidget)
self.retranslateUi(Form)
QtCore.QMetaObject.connectSlotsByName(Form)
def retranslateUi(self, Form):
_translate = QtCore.QCoreApplication.translate
Form.setWindowTitle(_translate("Form", "文件瀏覽器"))
self.back_btn.setText(_translate("Form", "返回"))
三、 信號與槽連接
3.1、得到當前的目錄路徑
def show_dir(self):
# 顯示當前目錄內(nèi)容的函數(shù)
self.listWidget.clear() # 清空列表
self.dir.setPath(self.lineEdit.text()) # 設置QDir對象的路徑為文本框中的路徑
Dir_filter = QDir.AllEntries | QDir.NoDotAndDotDot # 過濾條件:所有條目,不包括.和..
sort_filter = QDir.DirsFirst # 排序條件:文件夾優(yōu)先
self.list_list = self.dir.entryInfoList(Dir_filter, sort_filter) # 獲取目錄列表
for i in self.list_list: # 遍歷目錄列表
item = QListWidgetItem() # 創(chuàng)建新的列表項
# 根據(jù)條目類型設置圖標
if i.isDir():
item.setIcon(QIcon('../菜單/images/icon/dir.png')) # 設置目錄圖標
elif i.isFile():
item.setIcon(QIcon('../菜單/images/icon/file.png')) # 設置文件圖標
item.setText(i.fileName()) # 設置列表項的文本為文件或目錄名
self.listWidget.addItem(item) # 將項添加到列表中3.2、 選擇目錄中的選項雙擊
def btn_btn(self, item):
# 雙擊列表項的槽函數(shù)
result = self.dir.cd(item.text()) # 進入選中的目錄
print(result) # 打印進入結果
if result: # 如果成功進入目錄
path = self.dir.absolutePath() # 獲取當前目錄的絕對路徑
self.lineEdit.setText(path) # 更新路徑文本框
self.show_dir() # 更新目錄展示
else: # 如果不是目錄,嘗試打開文件
filepath = self.dir.absolutePath() + '/' + item.text() # 構造文件路徑
# print(filepath)
self.progess = QProcess(self) # 創(chuàng)建QProcess對象用于啟動子進程
argv = [] # 存儲進程的參數(shù)
argv.append("notepad.py") # 添加要執(zhí)行的腳本
argv.append(filepath) # 添加文件路徑作為參數(shù)
self.progess.start('python', argv) # 啟動python進程3.3、 返回上層目錄
def back_slot(self):
# 返回上層目錄的槽函數(shù)
result = self.dir.cdUp() # 嘗試進入上層目錄
if result: # 如果成功
path = self.dir.absolutePath() # 獲取當前目錄的絕對路徑
print(path) # 打印路徑
self.lineEdit.setText(path) # 更新文本框中的路徑
self.show_dir() # 更新目錄展示四、用到的庫函數(shù)
1.QDir
- setPath() 設置路徑
- entryInfoList() 獲取當前目錄下所有文件夾以及文件信息,返回一個列表
- cd() 切換目錄
- cdUp() 返回上一級目錄
- absolutePath() 獲取當前目錄的絕對路徑
2.QListWidget
- addItem() 添加單元項
- clear() 清空列表
- itemDoubleClicked() 單元項雙擊信號
3.QListWidgetItem
- setText() 設置文本
- setIcon() 設置圖標
- text() 獲取文本內(nèi)容
4.QFileInfoList
at() 訪問元素
5.QFileInfo
- fileName() 獲取文件名
- isDir() 判斷是不是文件夾
- isFile() 判斷是不是文件
6.QProcess
start() 啟動進程
五、完整代碼
import sys
from PyQt5.QtGui import QIcon
from file_web import Ui_Form # 導入生成的UI類
from PyQt5.QtWidgets import QApplication, QWidget, QListWidget, QListWidgetItem # 導入所需的Qt組件
from PyQt5.QtCore import QDir, QProcess # 導入目錄和進程相關的類
class fileWidge(QWidget, Ui_Form):
def __init__(self):
super().__init__()
self.setupUi(self) # 設置UI界面
self.lineEdit.setText('./') # 設置初始路徑為當前目錄
self.dir = QDir() # 創(chuàng)建QDir對象以處理目錄
self.show_dir() # 顯示當前目錄的內(nèi)容
self.slot_init() # 初始化信號和槽連接
def slot_init(self):
# 連接按鈕和列表項的信號到相應的槽函數(shù)
self.back_btn.clicked.connect(self.back_slot) # 返回上級目錄按鈕
self.listWidget.itemDoubleClicked.connect(self.btn_btn) # 雙擊列表項打開
def back_slot(self):
# 返回上層目錄的槽函數(shù)
result = self.dir.cdUp() # 嘗試進入上層目錄
if result: # 如果成功
path = self.dir.absolutePath() # 獲取當前目錄的絕對路徑
print(path) # 打印路徑
self.lineEdit.setText(path) # 更新文本框中的路徑
self.show_dir() # 更新目錄展示
def btn_btn(self, item):
# 雙擊列表項的槽函數(shù)
result = self.dir.cd(item.text()) # 進入選中的目錄
print(result) # 打印進入結果
if result: # 如果成功進入目錄
path = self.dir.absolutePath() # 獲取當前目錄的絕對路徑
self.lineEdit.setText(path) # 更新路徑文本框
self.show_dir() # 更新目錄展示
else: # 如果不是目錄,嘗試打開文件
filepath = self.dir.absolutePath() + '/' + item.text() # 構造文件路徑
# print(filepath)
self.progess = QProcess(self) # 創(chuàng)建QProcess對象用于啟動子進程
argv = [] # 存儲進程的參數(shù)
argv.append("notepad.py") # 添加要執(zhí)行的腳本
argv.append(filepath) # 添加文件路徑作為參數(shù)
self.progess.start('python', argv) # 啟動python進程
def show_dir(self):
# 顯示當前目錄內(nèi)容的函數(shù)
self.listWidget.clear() # 清空列表
self.dir.setPath(self.lineEdit.text()) # 設置QDir對象的路徑為文本框中的路徑
Dir_filter = QDir.AllEntries | QDir.NoDotAndDotDot # 過濾條件:所有條目,不包括.和..
sort_filter = QDir.DirsFirst # 排序條件:文件夾優(yōu)先
self.list_list = self.dir.entryInfoList(Dir_filter, sort_filter) # 獲取目錄列表
for i in self.list_list: # 遍歷目錄列表
item = QListWidgetItem() # 創(chuàng)建新的列表項
# 根據(jù)條目類型設置圖標
if i.isDir():
item.setIcon(QIcon('../菜單/images/icon/dir.png')) # 設置目錄圖標
elif i.isFile():
item.setIcon(QIcon('../菜單/images/icon/file.png')) # 設置文件圖標
item.setText(i.fileName()) # 設置列表項的文本為文件或目錄名
self.listWidget.addItem(item) # 將項添加到列表中
if __name__ == '__main__':
app = QApplication(sys.argv) # 創(chuàng)建應用程序?qū)嵗?
windows = fileWidge() # 創(chuàng)建主窗口實例
windows.show() # 顯示主窗口
sys.exit(app.exec_()) # 運行應用程序并在退出時關閉到此這篇關于Python+PyQt手搓一個文件瀏覽器的文章就介紹到這了,更多相關Python文件瀏覽器內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Python中的copy()函數(shù)詳解(list,array)
這篇文章主要介紹了Python中的copy()函數(shù)詳解(list,array),具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-09-09
Python filter()及reduce()函數(shù)使用方法解析
這篇文章主要介紹了Python filter()及reduce()函數(shù)使用方法解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2020-09-09
Windows10下 python3.7 安裝 facenet的教程
這篇文章主要介紹了Windows10 python3.7 安裝 facenet的教程,本文給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下2019-09-09

