广告位联系
返回顶部
分享到

Python+PyQt手搓一个文件浏览器

python 来源:互联网 作者:佚名 发布时间:2025-02-15 23:09:46 人浏览
摘要

一、效果展示 二、界面设计 该界面通过Qt Designer设计 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 # -*- coding: utf-8 -*- # Form imple

一、效果展示

二、界面设计 

该界面通过Qt Designer设计

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

# -*- 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、得到当前的目录路径

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

def show_dir(self):

    # 显示当前目录内容的函数

    self.listWidget.clear()  # 清空列表

    self.dir.setPath(self.lineEdit.text())  # 设置QDir对象的路径为文本框中的路径

    Dir_filter = QDir.AllEntries | QDir.NoDotAndDotDot  # 过滤条件:所有条目,不包括.和..

    sort_filter = QDir.DirsFirst  # 排序条件:文件夹优先

  

    self.list_list = self.dir.entryInfoList(Dir_filter, sort_filter)  # 获取目录列表

    for i in self.list_list:  # 遍历目录列表

        item = QListWidgetItem()  # 创建新的列表项

        # 根据条目类型设置图标

        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、 选择目录中的选项双击

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

def btn_btn(self, item):

    # 双击列表项的槽函数

    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)  # 创建QProcess对象用于启动子进程

        argv = []  # 存储进程的参数

        argv.append("notepad.py")  # 添加要执行的脚本

        argv.append(filepath)  # 添加文件路径作为参数

        self.progess.start('python', argv)  # 启动python进程

3.3、 返回上层目录

?

1

2

3

4

5

6

7

8

def back_slot(self):

    # 返回上层目录的槽函数

    result = self.dir.cdUp()  # 尝试进入上层目录

    if result:  # 如果成功

        path = self.dir.absolutePath()  # 获取当前目录的绝对路径

        print(path)  # 打印路径

        self.lineEdit.setText(path)  # 更新文本框中的路径

        self.show_dir()  # 更新目录展示

四、用到的库函数 

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()        启动进程

五、完整代码

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

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()  # 创建QDir对象以处理目录

        self.show_dir()  # 显示当前目录的内容

  

        self.slot_init()  # 初始化信号和槽连接

  

    def slot_init(self):

        # 连接按钮和列表项的信号到相应的槽函数

        self.back_btn.clicked.connect(self.back_slot)  # 返回上级目录按钮

        self.listWidget.itemDoubleClicked.connect(self.btn_btn)  # 双击列表项打开

  

    def back_slot(self):

        # 返回上层目录的槽函数

        result = self.dir.cdUp()  # 尝试进入上层目录

        if result:  # 如果成功

            path = self.dir.absolutePath()  # 获取当前目录的绝对路径

            print(path)  # 打印路径

            self.lineEdit.setText(path)  # 更新文本框中的路径

            self.show_dir()  # 更新目录展示

  

    def btn_btn(self, item):

        # 双击列表项的槽函数

        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)  # 创建QProcess对象用于启动子进程

            argv = []  # 存储进程的参数

            argv.append("notepad.py")  # 添加要执行的脚本

            argv.append(filepath)  # 添加文件路径作为参数

            self.progess.start('python', argv)  # 启动python进程

  

    def show_dir(self):

        # 显示当前目录内容的函数

        self.listWidget.clear()  # 清空列表

        self.dir.setPath(self.lineEdit.text())  # 设置QDir对象的路径为文本框中的路径

        Dir_filter = QDir.AllEntries | QDir.NoDotAndDotDot  # 过滤条件:所有条目,不包括.和..

        sort_filter = QDir.DirsFirst  # 排序条件:文件夹优先

  

        self.list_list = self.dir.entryInfoList(Dir_filter, sort_filter)  # 获取目录列表

        for i in self.list_list:  # 遍历目录列表

            item = QListWidgetItem()  # 创建新的列表项

            # 根据条目类型设置图标

            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)  # 创建应用程序实例

    windows = fileWidge()  # 创建主窗口实例

  

    windows.show()  # 显示主窗口

    sys.exit(app.exec_())  # 运行应用程序并在退出时关闭


版权声明 : 本文内容来源于互联网或用户自行发布贡献,该文观点仅代表原作者本人。本站仅提供信息存储空间服务和不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权, 违法违规的内容, 请发送邮件至2530232025#qq.cn(#换@)举报,一经查实,本站将立刻删除。
原文链接 :
相关文章
  • Python实现批量添加视频文本水印
    这个是一个基于PyQt5开发的视频水印批量添加工具,旨在为多个视频文件添加文本水印。用户可以自定义水印的文本内容、字体颜色、字号大
  • 在不同系统间迁移Python程序的方法
    在开发 Python 项目时,我们常常会遇到需要将在 Windows 系统上编写的程序迁移到 Linux 服务器上运行的情况,尤其是当服务器环境存在差异(
  • Python+PyQt手搓一个文件浏览器

    Python+PyQt手搓一个文件浏览器
    一、效果展示 二、界面设计 该界面通过Qt Designer设计 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
  • Python实现将PDF文件拆分任意页数介绍

    Python实现将PDF文件拆分任意页数介绍
    PyMuPDF,简称fitz,是一个轻量级的Python库,它基于MuPDF的C++库,提供了丰富的功能,包括但不限于PDF的读取、编辑、转换和渲染。Fitz作为Py
  • 20个实用的Python Excel自动化脚本介绍
    在数据处理和分析的过程中,Excel文件是我们日常工作中常见的格式。通过Python,我们可以实现对Excel文件的各种自动化操作,提高工作效率
  • Python实现移动指定图片到指定目录

    Python实现移动指定图片到指定目录
    前阵子,拍了200张照片,然后挑了20张找人精修下,今天修完发来给我,然后我先对比一下和原图的效果差异,以便做验收。由于前期挑出来
  • 使用Python IDLE进行Debug调试的图文介绍

    使用Python IDLE进行Debug调试的图文介绍
    1.首先以我的Python版本为例为大家讲解,我的版本是Python 3.7,版本问题对使用情况影响不大。 2.接着我们可以通过新建文件夹来输入我们的
  • 树莓派启动python的实现方法介绍

    树莓派启动python的实现方法介绍
    树莓派运行Python程序的方法: 一、RaspBerry系统设置 1、首先在开发板没有通电情况下,连接硬件,以及项目中用到传感器。比如当前项目需
  • Python给Excel写入数据的四种方法介绍
    Python 在数据处理领域应用广泛,其中与 Excel 文件的交互是常见需求之一。 本文将介绍四种使用 Python 给Excel 文件写入数据的方法,并结合生
  • 用Python编写一个MP3分割工具

    用Python编写一个MP3分割工具
    最终效果图 代码 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
  • 本站所有内容来源于互联网或用户自行发布,本站仅提供信息存储空间服务,不拥有版权,不承担法律责任。如有侵犯您的权益,请您联系站长处理!
  • Copyright © 2017-2022 F11.CN All Rights Reserved. F11站长开发者网 版权所有 | 苏ICP备2022031554号-1 | 51LA统计