Python中PyQt5可视化界面通过拖拽来上传文件的实现

 更新时间:2023年12月05日 15:36:33   作者:W金刚葫芦娃W  
本文主要介绍了Python中PyQt5可视化界面通过拖拽来上传文件的实现,通过构建一个可接受拖拽的区域,并重写相关事件处理函数,可以方便地实现文件上传功能,具有一定的参考价值,感兴趣的可以了解一下

注:这个窗口提供了一个快速上传文件的小tips,如果需要对上传的文件进行进一步处理的可以在“processFiles”函数或者编写其它函数进行扩充就可以。

1、需要安装模块

pip install PyQt5

2、运行效果

1、通过拖拽的方式上传需要的文件到窗口,会直接获取到它的路径并显示出来

2、提交文件后,可以获取窗口内的所有文件路径,并且以列表的形式存储

3、python代码

在代码里都有详细的注释;这里就不做过多的说明

import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QTextEdit, QPushButton, QVBoxLayout, QWidget,QDesktopWidget
'''
#1、使用以下代码中的文件拖拽功能,只需将文件或文件夹拖拽到文本编辑框中即可。如果文件是本地文件,它们将以文件路径的形式显示在文本编辑框中。
#2、如果你想要进一步处理这些文件路径,比如复制、移动、读取或执行其他操作,你可以在 processFiles 方法中添加你的自定义代码,该方法在用户点击提交按钮后被调用。在该方法中,你可以访问文本编辑框的内容,将其拆分成文件路径,并执行相应的操作。
'''
#使用子类来继承父类的方法,这里的'DragDropTextEdit‘,继承自  'QTextEdit‘ ,并且添加了文件拖拽的支持。
#这使得你可以将它用作拖拽文件的目标,以便在应用程序中方便地处理文件路径。
class DragDropTextEdit(QTextEdit):
    def __init__(self, parent=None):
        super(DragDropTextEdit, self).__init__(parent)
        self.setAcceptDrops(True)        #定义的 DragDropTextEdit 类的构造函数中调用的方法,它的作用是启用该文本编辑框接受拖拽操作。

    #当用户拖拽文件或其他可拖拽的内容进入文本编辑框时,这个方法会被触发
    def dragEnterEvent(self, event):
        if event.mimeData().hasUrls():  #它检查拖拽事件中的 MIME 数据是否包含文件路径
            event.accept()   #如果包含文件路径,它调用 event.accept() 来接受拖拽事件,允许文件拖拽进入文本编辑框。
        else:                        #否则,如果不包含文件路径,它调用 event.ignore() 来忽略拖拽事件,表示不允许拖拽操作。
            event.ignore()


    def dropEvent(self, event):   #当用户释放鼠标按钮时,这个方法会被触发,用于处理拖拽事件。在这个方法中,你可以获取拖拽事件中的文件路径。
        for url in event.mimeData().urls():   #使用 event.mimeData().urls() 来获取所有拖拽事件中的 URL 列表,每个 URL 表示一个文件或文件夹。
            if url.isLocalFile() and url.toLocalFile():  #使用 url.toLocalFile() 来获取本地文件路径,如果是本地文件的话。
                self.append(url.toLocalFile())   #接下来,你可以将这些文件路径添加到文本编辑框中,或者进行任何你希望执行的处理。
class MainApp(QMainWindow):  #创建实例化类
    def __init__(self):
        super().__init__()
        self.initUI()
    def initUI(self):
        self.setWindowTitle('文件拖拽窗口')   #设置主窗口的标题为 "文件拖拽窗口"。
        # 获取屏幕的宽度和高度
        screen = QDesktopWidget().screenGeometry()
        screenWidth = screen.width()
        screenHeight = screen.height()
        # 计算窗口居中的坐标
        x = (screenWidth - self.width()) // 2
        y = (screenHeight - self.height()) // 2
        #设置窗口大小已经出现在屏幕的什么位置
        self.setGeometry(x, y, 600, 400)  #设置主窗口的初始位置和大小。 (x, y)是设置窗口出现的位置。窗口的宽度为 600 像素,高度为 400 像素。

        #初始化窗口排版模式
        central = QWidget(self)    #创建一个名为 central 的 QWidget(窗口中央部件),用于将其他小部件添加到主窗口的中央区域。
        self.setCentralWidget(central) #将 central 部件设置为主窗口的中央部分。这意味着所有其他小部件将放置在 central 部件中,以确保它们在窗口中间显示。
        display = QVBoxLayout(central) #创建一个垂直布局管理器 display,它将用于管理 central 部件中的小部件的位置和大小。垂直布局意味着小部件将按垂直方向排列。

        #窗口
        self.textEdit = DragDropTextEdit()  #####这里来实例化上面子类继承的内容DragDropTextEdit 的实例,并将其赋值给 self.textEdit 属性。这个文本编辑框支持文件拖拽功能。
        display.addWidget(self.textEdit) #将 self.textEdit 添加到垂直布局管理器 display 中
        #按钮
        self.submit_Button = QPushButton('提交文件', self)  #创建提交按钮的名称
        self.submit_Button.clicked.connect(self.processFiles) #给提交按钮绑定事件函数processFiles
        display.addWidget(self.submit_Button)   #展示出提交按钮
    def processFiles(self):
        file_paths = self.textEdit.toPlainText().split('\n')
        # 这里添加处理文件的代码
        print("文件路径如下:", file_paths)





def main():
    app = QApplication(sys.argv)
    ex = MainApp()
    ex.show()
    sys.exit(app.exec_())

if __name__ == '__main__':
    main()

到此这篇关于Python中PyQt5可视化界面通过拖拽来上传文件的实现的文章就介绍到这了,更多相关PyQt5拖拽上传文件内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家! 

相关文章

  • Python实现矩阵加法和乘法的方法分析

    Python实现矩阵加法和乘法的方法分析

    这篇文章主要介绍了Python实现矩阵加法和乘法的方法,结合实例形式对比分析了Python针对矩阵的加法与乘法运算相关操作技巧,需要的朋友可以参考下
    2017-12-12
  • 使用SimpleITK读取NII格式三维图像及注意事项说明

    使用SimpleITK读取NII格式三维图像及注意事项说明

    这篇文章主要介绍了使用SimpleITK读取NII格式三维图像及注意事项说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-12-12
  • Mac下Supervisor进程监控管理工具的安装与配置

    Mac下Supervisor进程监控管理工具的安装与配置

    这篇文章主要介绍了Mac下Supervisor进程监控管理工具的安装与配置,Supervisor 是由 Python 写成,是一个类 unix 操作系统下的进程监控管理工具,本文讲解MAC系统下的配置与安装,需要的朋友可以参考下
    2014-12-12
  • Django app配置多个数据库代码实例

    Django app配置多个数据库代码实例

    这篇文章主要介绍了Django app配置多个数据库代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-12-12
  • Django框架中间件(Middleware)用法实例分析

    Django框架中间件(Middleware)用法实例分析

    这篇文章主要介绍了Django框架中间件(Middleware)用法,结合实例形式分析了Django框架中间件(Middleware)的功能、用法及相关操作技巧,需要的朋友可以参考下
    2019-05-05
  • Python实现爬取马云的微博功能示例

    Python实现爬取马云的微博功能示例

    这篇文章主要介绍了Python实现爬取马云的微博功能,结合实例形式较为详细的分析了Python模拟ajax请求爬取马云微博的相关操作技巧与注意事项,需要的朋友可以参考下
    2019-02-02
  • Python使用urllib2模块抓取HTML页面资源的实例分享

    Python使用urllib2模块抓取HTML页面资源的实例分享

    这篇文章主要介绍了Python使用urllib2模块抓取HTML页面资源的实例分享,将要抓取的页面地址写在单独的规则列表中方便组织和重复使用,需要的朋友可以参考下
    2016-05-05
  • 一文带你梳理Python的中级知识

    一文带你梳理Python的中级知识

    Python是一种高级编程语言,它在众多编程语言中,拥有极高的人气和使用率。本文主要带大家梳理一下Python中常用的中级知识,希望对大家有所帮助
    2023-04-04
  • Python socket之TCP通信及下载文件的实现

    Python socket之TCP通信及下载文件的实现

    本文主要介绍了Python socket之TCP通信及下载文件的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-02-02
  • Python 存取npy格式数据实例

    Python 存取npy格式数据实例

    这篇文章主要介绍了Python 存取npy格式数据实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-07-07

最新评论