最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python+PyQt手搓一個文件瀏覽器

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

一、效果展示

二、界面設(shè)計 

該界面通過Qt Designer設(shè)計

# -*- 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、得到當(dāng)前的目錄路徑

def show_dir(self):
    # 顯示當(dāng)前目錄內(nèi)容的函數(shù)
    self.listWidget.clear()  # 清空列表
    self.dir.setPath(self.lineEdit.text())  # 設(shè)置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ù)條目類型設(shè)置圖標(biāo)
        if i.isDir():
            item.setIcon(QIcon('../菜單/images/icon/dir.png'))  # 設(shè)置目錄圖標(biāo)
        elif i.isFile():
            item.setIcon(QIcon('../菜單/images/icon/file.png'))  # 設(shè)置文件圖標(biāo)
        item.setText(i.fileName())  # 設(shè)置列表項的文本為文件或目錄名
        self.listWidget.addItem(item)  # 將項添加到列表中

3.2、 選擇目錄中的選項雙擊

def btn_btn(self, item):
    # 雙擊列表項的槽函數(shù)
    result = self.dir.cd(item.text())  # 進(jìn)入選中的目錄
    print(result)  # 打印進(jìn)入結(jié)果
    if result:  # 如果成功進(jìn)入目錄
        path = self.dir.absolutePath()  # 獲取當(dāng)前目錄的絕對路徑
        self.lineEdit.setText(path)  # 更新路徑文本框
        self.show_dir()  # 更新目錄展示
    else:  # 如果不是目錄,嘗試打開文件
        filepath = self.dir.absolutePath() + '/' + item.text()  # 構(gòu)造文件路徑
        # print(filepath)
        self.progess = QProcess(self)  # 創(chuàng)建QProcess對象用于啟動子進(jìn)程
        argv = []  # 存儲進(jìn)程的參數(shù)
        argv.append("notepad.py")  # 添加要執(zhí)行的腳本
        argv.append(filepath)  # 添加文件路徑作為參數(shù)
        self.progess.start('python', argv)  # 啟動python進(jìn)程

3.3、 返回上層目錄

def back_slot(self):
    # 返回上層目錄的槽函數(shù)
    result = self.dir.cdUp()  # 嘗試進(jìn)入上層目錄
    if result:  # 如果成功
        path = self.dir.absolutePath()  # 獲取當(dāng)前目錄的絕對路徑
        print(path)  # 打印路徑
        self.lineEdit.setText(path)  # 更新文本框中的路徑
        self.show_dir()  # 更新目錄展示

四、用到的庫函數(shù) 

1.QDir      

  • setPath()        設(shè)置路徑
  • entryInfoList() 獲取當(dāng)前目錄下所有文件夾以及文件信息,返回一個列表
  • cd()        切換目錄
  • cdUp()        返回上一級目錄
  • absolutePath()        獲取當(dāng)前目錄的絕對路徑

2.QListWidget

  • addItem()        添加單元項
  • clear()        清空列表
  • itemDoubleClicked()        單元項雙擊信號

3.QListWidgetItem

  • setText()        設(shè)置文本
  • setIcon()        設(shè)置圖標(biāo)
  • text()        獲取文本內(nèi)容

4.QFileInfoList

at()        訪問元素

5.QFileInfo

  • fileName()        獲取文件名
  • isDir()        判斷是不是文件夾
  • isFile()        判斷是不是文件

6.QProcess

start()        啟動進(jìn)程

五、完整代碼

import sys
from PyQt5.QtGui import QIcon
from file_web import Ui_Form  # 導(dǎo)入生成的UI類
from PyQt5.QtWidgets import QApplication, QWidget, QListWidget, QListWidgetItem  # 導(dǎo)入所需的Qt組件
from PyQt5.QtCore import QDir, QProcess  # 導(dǎo)入目錄和進(jìn)程相關(guān)的類
 
 
class fileWidge(QWidget, Ui_Form):
    def __init__(self):
        super().__init__()
        self.setupUi(self)  # 設(shè)置UI界面
 
        self.lineEdit.setText('./')  # 設(shè)置初始路徑為當(dāng)前目錄
 
        self.dir = QDir()  # 創(chuàng)建QDir對象以處理目錄
        self.show_dir()  # 顯示當(dāng)前目錄的內(nèi)容
 
        self.slot_init()  # 初始化信號和槽連接
 
    def slot_init(self):
        # 連接按鈕和列表項的信號到相應(yīng)的槽函數(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()  # 嘗試進(jìn)入上層目錄
        if result:  # 如果成功
            path = self.dir.absolutePath()  # 獲取當(dāng)前目錄的絕對路徑
            print(path)  # 打印路徑
            self.lineEdit.setText(path)  # 更新文本框中的路徑
            self.show_dir()  # 更新目錄展示
 
    def btn_btn(self, item):
        # 雙擊列表項的槽函數(shù)
        result = self.dir.cd(item.text())  # 進(jìn)入選中的目錄
        print(result)  # 打印進(jìn)入結(jié)果
        if result:  # 如果成功進(jìn)入目錄
            path = self.dir.absolutePath()  # 獲取當(dāng)前目錄的絕對路徑
            self.lineEdit.setText(path)  # 更新路徑文本框
            self.show_dir()  # 更新目錄展示
        else:  # 如果不是目錄,嘗試打開文件
            filepath = self.dir.absolutePath() + '/' + item.text()  # 構(gòu)造文件路徑
            # print(filepath)
            self.progess = QProcess(self)  # 創(chuàng)建QProcess對象用于啟動子進(jìn)程
            argv = []  # 存儲進(jìn)程的參數(shù)
            argv.append("notepad.py")  # 添加要執(zhí)行的腳本
            argv.append(filepath)  # 添加文件路徑作為參數(shù)
            self.progess.start('python', argv)  # 啟動python進(jìn)程
 
    def show_dir(self):
        # 顯示當(dāng)前目錄內(nèi)容的函數(shù)
        self.listWidget.clear()  # 清空列表
        self.dir.setPath(self.lineEdit.text())  # 設(shè)置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ù)條目類型設(shè)置圖標(biāo)
            if i.isDir():
                item.setIcon(QIcon('../菜單/images/icon/dir.png'))  # 設(shè)置目錄圖標(biāo)
            elif i.isFile():
                item.setIcon(QIcon('../菜單/images/icon/file.png'))  # 設(shè)置文件圖標(biāo)
            item.setText(i.fileName())  # 設(shè)置列表項的文本為文件或目錄名
            self.listWidget.addItem(item)  # 將項添加到列表中
 
 
if __name__ == '__main__':
    app = QApplication(sys.argv)  # 創(chuàng)建應(yīng)用程序?qū)嵗?
    windows = fileWidge()  # 創(chuàng)建主窗口實例
 
    windows.show()  # 顯示主窗口
    sys.exit(app.exec_())  # 運行應(yīng)用程序并在退出時關(guān)閉

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

相關(guān)文章

  • Python中的copy()函數(shù)詳解(list,array)

    Python中的copy()函數(shù)詳解(list,array)

    這篇文章主要介紹了Python中的copy()函數(shù)詳解(list,array),具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • numpy:找到指定元素的索引示例

    numpy:找到指定元素的索引示例

    今天小編就為大家分享一篇numpy:找到指定元素的索引示例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-11-11
  • Django框架安裝方法圖文詳解

    Django框架安裝方法圖文詳解

    這篇文章主要介紹了Django框架安裝方法,結(jié)合圖文與實例形式詳細(xì)分析了Django框架的下載、安裝簡單使用方法及相關(guān)操作注意事項,需要的朋友可以參考下
    2019-11-11
  • Python通過future處理并發(fā)問題

    Python通過future處理并發(fā)問題

    這篇文章主要介紹了Python通過future處理并發(fā)問題,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2017-10-10
  • Python filter()及reduce()函數(shù)使用方法解析

    Python filter()及reduce()函數(shù)使用方法解析

    這篇文章主要介紹了Python filter()及reduce()函數(shù)使用方法解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-09-09
  • python代碼能做成軟件嗎

    python代碼能做成軟件嗎

    在本篇內(nèi)容里小編給大家分享的是一篇關(guān)于把python代碼做成軟件的方法,有興趣的朋友們可以閱讀下。
    2020-07-07
  • Windows10下 python3.7 安裝 facenet的教程

    Windows10下 python3.7 安裝 facenet的教程

    這篇文章主要介紹了Windows10 python3.7 安裝 facenet的教程,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-09-09
  • Python處理缺失值的8種不同方法實例

    Python處理缺失值的8種不同方法實例

    缺失值是指粗糙數(shù)據(jù)中由于缺少信息而造成的數(shù)據(jù)的聚類、分組、刪失或截斷,下面這篇文章主要給大家介紹了關(guān)于Python處理缺失值的8種不同方法,文中通過實例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-06-06
  • Python中的__repr__()方法小結(jié)

    Python中的__repr__()方法小結(jié)

    在 Python 中,__repr__()?是一個特殊方法,用于定義對象的字符串表示形式,本文主要介紹了Python中的__repr__()方法小結(jié),具有一定的參考價值,感興趣的可以了解一下
    2024-01-01
  • Python正則表達(dá)式從原理到實踐操作詳解

    Python正則表達(dá)式從原理到實踐操作詳解

    正則表達(dá)式是對字符串提取的一套規(guī)則,我們把這個規(guī)則用正則里面的特定語法表達(dá)出來,去匹配滿足這個規(guī)則的字符串,這篇文章主要介紹了Python正則表達(dá)式從原理到實踐操作的相關(guān)資料,需要的朋友可以參考下
    2026-04-04

最新評論

土默特右旗| 富平县| 中阳县| 濉溪县| 马龙县| 玉田县| 广平县| 赤峰市| 常山县| 沭阳县| 鄂尔多斯市| 桑日县| 贡嘎县| 大悟县| 宝清县| 喜德县| 铜梁县| 铅山县| 铁岭市| 东兴市| 海兴县| 璧山县| 安溪县| 石泉县| 茶陵县| 中西区| 湘潭市| 治多县| 郎溪县| 岳阳市| 贵定县| 南靖县| 茌平县| 德州市| 乌什县| 昌平区| 东光县| 隆林| 岳阳市| 平南县| 博湖县|