探索文件与交互:使用PyQt5构建一个高级文件选择器

这篇具有很好参考价值的文章主要介绍了探索文件与交互:使用PyQt5构建一个高级文件选择器。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

探索文件与交互:使用PyQt5构建一个高级文件选择器,交互,qt,开发语言

在当今的应用程序开发中,文件管理和交互是一个重要的组成部分。特别是对于桌面应用程序,提供一个直观、功能丰富的文件选择器是提高用户体验的关键。

本篇博客,我将介绍如何使用Python和PyQt5来构建一个高级的文件选择器,它不仅能浏览文件,还能预览图片,编辑文本文件,并提供基本的右键菜单操作。

关键功能

  • 文件浏览:使用QColumnViewQFileSystemModel展示文件系统。
  • 图片预览:选中图片文件时,能在界面中预览。
  • 文本编辑:选中文本文件时,能在界面中进行编辑。
  • 保存编辑内容:编辑文本文件后,提供保存功能。
  • 右键菜单:提供自定义的右键菜单,实现文件的打开和查看所在文件夹。

设计思路

使用PyQt5的强大功能,我们可以轻松创建出复杂的用户界面。首先,我们使用QColumnView来展示文件系统的层级结构,它能提供直观的列式浏览体验。接着,通过QFileSystemModel来管理和展示文件系统中的数据。

图片预览和文本编辑功能是通过判断文件类型来实现的。如果选中的是图片文件(如jpg、png等),程序会在一个QLabel中显示该图片。如果选中的是文本文件(如txt、py等),则可以在QTextEdit中编辑,并通过一个保存按钮将更改保存回文件。

右键菜单是通过setContextMenuPolicycustomContextMenuRequested信号实现的。当用户在文件上点击右键时,会弹出一个自定义菜单,提供打开文件或文件所在文件夹的选项。

代码实现

以下是完整的代码实现: 

import sys
import os
from PyQt5.QtWidgets import QApplication, QMainWindow, QColumnView, QFileSystemModel, QLabel, QTextEdit, QPushButton, \
    QVBoxLayout,QHBoxLayout, QWidget, QMenu
from PyQt5.QtGui import QPixmap, QDesktopServices
from PyQt5.QtCore import QDir, QFileInfo, QUrl, Qt
from PyQt5.Qt import QSplitter


class FileExplorer(QMainWindow):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("文件选择器")
        self.setGeometry(100, 100, 1000, 600)

        self.model = QFileSystemModel()
        self.model.setRootPath(QDir.rootPath())

        self.columnView = QColumnView()
        self.columnView.setModel(self.model)
        self.columnView.clicked.connect(self.on_file_selected)

        self.columnView.setContextMenuPolicy(Qt.CustomContextMenu)
        self.columnView.customContextMenuRequested.connect(self.open_context_menu)

        self.imageLabel = QLabel("图片预览")
        self.imageLabel.setScaledContents(True)
        self.textEdit = QTextEdit()
        self.saveButton = QPushButton("保存")
        self.saveButton.clicked.connect(self.save_file)

        rightLayout = QVBoxLayout()
        rightLayout.addWidget(self.imageLabel)
        rightLayout.addWidget(self.textEdit)
        rightLayout.addWidget(self.saveButton)

        self.rightWidget = QWidget()
        self.rightWidget.setLayout(rightLayout)

        splitter = QSplitter(Qt.Vertical)
        splitter.addWidget(self.columnView)
        splitter.addWidget(self.rightWidget)
        splitter.setStretchFactor(1, 1)

        centralWidget = QWidget()
        centralWidget.setLayout(QVBoxLayout())
        centralWidget.layout().addWidget(splitter)
        self.setCentralWidget(centralWidget)

    def on_file_selected(self, index):
        path = self.model.filePath(index)
        fileInfo = QFileInfo(path)

        if fileInfo.isFile():
            if fileInfo.suffix().lower() in ['png', 'jpg', 'jpeg', 'bmp', 'gif']:
                self.show_image_preview(path)
            elif fileInfo.suffix().lower() in ['txt', 'py', 'html', 'css', 'js', 'cs']:
                self.show_text_editor(path)
            else:
                self.clear_previews()

    def show_image_preview(self, path):
        self.textEdit.hide()
        self.saveButton.hide()
        self.imageLabel.setPixmap(QPixmap(path))
        self.imageLabel.show()

    def show_text_editor(self, path):
        self.imageLabel.hide()
        self.textEdit.setPlainText("")
        self.textEdit.show()
        self.saveButton.show()
        with open(path, 'r', encoding="utf-8") as file:
            self.textEdit.setText(file.read())
        self.currentTextFilePath = path

    def save_file(self):
        with open(self.currentTextFilePath, 'w', encoding='utf-8') as file:
            file.write(self.textEdit.toPlainText())

    def clear_previews(self):
        self.imageLabel.clear()
        self.textEdit.clear()
        self.imageLabel.hide()
        self.textEdit.hide()
        self.saveButton.hide()

    def open_context_menu(self, position):
        index = self.columnView.indexAt(position)
        if not index.isValid():
            return

        menu = QMenu()
        openAction = menu.addAction("打开")
        openFolderAction = menu.addAction("打开所在文件夹")

        action = menu.exec_(self.columnView.mapToGlobal(position))

        if action == openAction:
            self.open_file(index)
        elif action == openFolderAction:
            self.open_file_folder(index)

    def open_file(self, index):
        path = self.model.filePath(index)
        QDesktopServices.openUrl(QUrl.fromLocalFile(path))

    def open_file_folder(self, index):
        path = self.model.filePath(index)
        QDesktopServices.openUrl(QUrl.fromLocalFile(os.path.dirname(path)))


if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = FileExplorer()
    ex.show()
    sys.exit(app.exec_())

结语

这个文件选择器是一个展示PyQt5框架能力的小示例。通过这个项目,你可以学习到如何处理文件系统数据,实现基本的文件操作界面,以及如何根据不同的文件类型提供不同的功能。PyQt5为桌面应用开发提供了广泛的可能性,你可以在此基础上继续扩展功能,打造更加强大的应用程序。文章来源地址https://www.toymoban.com/news/detail-819936.html

到了这里,关于探索文件与交互:使用PyQt5构建一个高级文件选择器的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • PyQt5学习笔记--多线程处理、数据交互

    目录 1--引入多线程的原因 2--PyQt多线程的基本知识 3--多线程登录程序的实例 4--参考 ① 如果Qt只采用单线程任务的方式,当遇到数据处理慢的情形时,会出现GUI卡死的情况。 ② 使用下述例子展示单线程任务的缺陷: ③ 代码: ④ 结果展示: 当点击第一个button时,GUI会出现卡

    2023年04月16日
    浏览(49)
  • 实习记录(5)——PyQT5界面设计及交互

    首先按照甲方PPT上给的界面做了,在写内部逻辑的时候发现有不少问题,没考虑到使用者的感受,甚至我觉得根本用不了。于是我和小哥讨论了一下之后,我按照我的想法做了一个新的页面出来,能实现需求的同时,让使用的人体验更好也更直观。 昨天安装成功了PyQT5,今天

    2023年04月24日
    浏览(37)
  • PyQT5: 构建图形用户界面的Python指南

    PyQt5是一个Python绑定的跨平台C++库,用于创建丰富的图形用户界面(GUI)。它是Qt库的Python接口,Qt库由Qt公司开发,用于开发GUI程序,也称作应用程序框架。在此,我们将详细介绍如何使用PyQt5创建图形用户界面。 在开始之前,我们需要确保已经在Python环境中安装了PyQt5。如果

    2024年02月13日
    浏览(53)
  • 可视可交互!在全志H618上用OpenCV读取图像显示到PyQt5窗口上

    OpenCV能够处理图像、视频、深度图像等各种类型的视觉数据,在某些情况下,尽管OpenCV可以显示窗口,但PyQt5可能更适合用于创建复杂的交互式应用程序,而自带GPU的H618就成为了这些图像显示的最佳载体。 这里分享一个代码,功能是使用图像处理库opencv从摄像头获取数据,缩

    2024年02月01日
    浏览(44)
  • python VTK PyQt5 VTK环境搭建 创建 渲染窗口及三维模型,包含 三维模型交互;

      目录 Part1. VTK 介绍 Part2. PyQt5 VTK环境搭建 安装Anaconda 自带Python Anaconda下载 安装PyQt5 安装 VTK Part3 :PyQt VTK 结合样例: Part1. VTK 介绍 VTK(visualization toolkit)是一个开源的免费软件系统,主要用于三维计算机图形学、图像处理和可视化。Vtk 是在面向对象原理的基础上设计和实现的

    2024年02月11日
    浏览(49)
  • PyQt5制作一个简单的登录界面

    最近在学习GUI设计,分享做的一些小项目。 这篇文我们讲一下如何制作一个简单的登录界面。 如下: 1、QtDesigner里绘制UI界面并设置属性 布局根据个人喜好,部件颜色、字体、背景属性在styleSheet里设置。 2、材料转换(将.ui文件转.py,.qrc文件转_rc.py) 通过PyUIC和PyRcc即可完成。

    2024年02月03日
    浏览(51)
  • 制作一个串口助手 | python + pyqt5

    目录 一、背景 1.1、开发流程图 二、前提 2.1、关于环境 2.2、关于源码 三、步骤 3.1、使用pyqt创建一个.ui界面并生成.py文件 3.2、创建两个.py文件,一个用来继承ui界面生成的.py类,一个用来实现各种功能 3.3、各个功能代码 3.3.1、打开串口 3.3.2、关闭串口 3.3.3、获取串口号 3.

    2024年02月05日
    浏览(82)
  • 【PyQt5】构建强大的Python图形用户界面应用程序 -- 入门指南

      作者主页: 爱笑的男孩。的博客_CSDN博客-深度学习,活动,python领域博主 爱笑的男孩。擅长深度学习,活动,python,等方面的知识,爱笑的男孩。关注算法,python,计算机视觉,图像处理,深度学习,pytorch,神经网络,opencv领域. https://blog.csdn.net/Code_and516?type=blog 个人简介:打工人。 持续分

    2024年02月15日
    浏览(48)
  • 【Python】pyqt5入门教程之第一个UI界面

    1.pyqt5工具安装 (1)使用pip工具安装PyQt5工具: (2)安装Qt Designer图形界面开发工具: 安装完成后所在路径 (3)安装QtDesigner 安装完成后所在路径 designer.exe路径 启动QtDesigner 2.第一个QT窗口程序 Pycharm配置 找到py文件,右键External Tool — QTDesigner—就可以启动 QTDesigner .ui文件转换

    2024年02月15日
    浏览(45)
  • Python - PyQT5 - ui文件转为py文件

    在QTdesigner图形化编辑工具中,有些控件我们是可以直接在编辑界面进行编辑的,有些是不可以编辑的,只能通过Python代码进行编辑,不过总体来说,所有能够通过图形化编辑界面可以编辑的,都可以通过Python语言实现控制,这点是毋庸置疑的,不过为了更加美观及降级软件开

    2024年02月05日
    浏览(50)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包