欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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):
    # 顯示當前目錄內容的函數(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()        獲取文本內容

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()  # 顯示當前目錄的內容
 
        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):
        # 顯示當前目錄內容的函數(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)建應用程序實例
    windows = fileWidge()  # 創(chuàng)建主窗口實例
 
    windows.show()  # 顯示主窗口
    sys.exit(app.exec_())  # 運行應用程序并在退出時關閉

到此這篇關于Python+PyQt手搓一個文件瀏覽器的文章就介紹到這了,更多相關Python文件瀏覽器內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

最新評論