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

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

 更新時間:2025年02月14日 15:33:16   作者:蹦蹦跳跳真可愛589  
這篇文章主要為大家詳細介紹了Python如何利用PyQt手搓一個文件瀏覽器,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學(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())  # 進入選中的目錄
    print(result)  # 打印進入結(jié)果
    if result:  # 如果成功進入目錄
        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對象用于啟動子進程
        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()  # 獲取當(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()        啟動進程

五、完整代碼

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)入目錄和進程相關(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()  # 嘗試進入上層目錄
        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())  # 進入選中的目錄
        print(result)  # 打印進入結(jié)果
        if result:  # 如果成功進入目錄
            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對象用于啟動子進程
            argv = []  # 存儲進程的參數(shù)
            argv.append("notepad.py")  # 添加要執(zhí)行的腳本
            argv.append(filepath)  # 添加文件路徑作為參數(shù)
            self.progess.start('python', argv)  # 啟動python進程
 
    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實現(xiàn)的漢諾塔算法示例

    python實現(xiàn)的漢諾塔算法示例

    這篇文章主要介紹了python實現(xiàn)的漢諾塔算法,結(jié)合實例形式分析了漢諾塔算法的原理、實現(xiàn)方法及相關(guān)操作注意事項,需要的朋友可以參考下
    2019-10-10
  • Windows下Python3.6安裝第三方模塊的方法

    Windows下Python3.6安裝第三方模塊的方法

    這篇文章主要介紹了Windows下Python3.6安裝第三方模塊的方法,需要的朋友可以參考下
    2018-11-11
  • Python報錯TypeError: tuple indices must be integers or slices, not str的問題分析及解決方法

    Python報錯TypeError: tuple indices must be

    在Python編程過程中,我們經(jīng)常會遇到各種各樣的報錯信息,其中,“TypeError: tuple indices must be integers or slices, not str”這個報錯,對于很多開發(fā)者來說,可能既熟悉又陌生,今天,我們就來深入探討一下這個報錯,看看它是如何產(chǎn)生的,以及如何快速有效地解決它
    2025-01-01
  • python GUI庫圖形界面開發(fā)之PyQt5菜單欄控件QMenuBar的詳細使用方法與實例

    python GUI庫圖形界面開發(fā)之PyQt5菜單欄控件QMenuBar的詳細使用方法與實例

    這篇文章主要介紹了python GUI庫圖形界面開發(fā)之PyQt5菜單欄控件QMenuBar的詳細使用方法與實例,需要的朋友可以參考下
    2020-02-02
  • pytorch dataloader 取batch_size時候出現(xiàn)bug的解決方式

    pytorch dataloader 取batch_size時候出現(xiàn)bug的解決方式

    今天小編就為大家分享一篇pytorch dataloader 取batch_size時候出現(xiàn)bug的解決方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-02-02
  • 詳解python中自定義超時異常的幾種方法

    詳解python中自定義超時異常的幾種方法

    這篇文章主要介紹了詳解python中自定義超時異常的幾種方法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07
  • Random 在 Python 中的使用方法

    Random 在 Python 中的使用方法

    random() 方法返回隨機生成的一個實數(shù),它在[0,1)范圍內(nèi)。這篇文章主要介紹了Random 在 Python 中的使用方法,需要的朋友可以參考下
    2018-08-08
  • Python實現(xiàn)批量圖片的切割

    Python實現(xiàn)批量圖片的切割

    本文主要介紹了Python實現(xiàn)批量圖片的切割,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-09-09
  • 關(guān)于python函數(shù)的建立、調(diào)用、傳參、返回值詳解

    關(guān)于python函數(shù)的建立、調(diào)用、傳參、返回值詳解

    這篇文章主要介紹了關(guān)于python函數(shù)的建立、調(diào)用、傳參、返回值詳解,Python?還支持自定義函數(shù),即將一段有規(guī)律的、可重復(fù)使用的代碼定義成函數(shù),從而達到一次編寫多次調(diào)用的目的,需要的朋友可以參考下
    2023-07-07
  • 使用Python實現(xiàn)管理系統(tǒng)附源碼

    使用Python實現(xiàn)管理系統(tǒng)附源碼

    這篇文章主要為大家介紹了Python實現(xiàn)管理系統(tǒng),具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-01-01

最新評論