许多 QWidget 对象支持拖放活动。那些允许拖动的widget 必须用 setDragEnabled() 设置为 可拖拽。完后dragEnterEvent、 dropEvent等函数会在相应事件发生时候被回调。另一方面,该widget响应拖放事件时,事件里包含mimeData,mimeData 为拖拽文件数据提供了一个容器,存储了MIME 类型的拖拽文件的 信息。

下面时监听到的几种与拖拽相关的事件:

  • DragEnterEvent提供了一个事件,当拖动动作进入它时,该事件被发送到目标小部件。

  • DragMoveEvent在拖放操作正在进行时使用。

  • DragLeaveEvent在拖放操作离开小部件时生成。

  • 另一方面,DropEvent发生在放置完成时。可以有条件地接受或拒绝事件的提议操作。

class DropArea(QLabel):def __init__(self, *args, **kwargs):super(DropArea, self).__init__(*args, **kwargs)self.setAcceptDrops(True)def dragEnterEvent(self, event):print("drag event")if event.mimeData().hasUrls():event.accept()else:event.ignore()def dropEvent(self, event):print("drop event")files = list()urls = [u for u in event.mimeData().urls()]for url in urls:print(url.path())files.append(url.toLocalFile())print(files)

我们定义了一个DropArea,而这个类继承自QLabel控件,同时我们在初始化的时候允许该控件接受拖放,然后我们定义了dragEnterEvent,该函数会在我们用鼠标拖动文件到该控件上时被触发,最后,我们定义了dropEvent,该函数会在鼠标拖动到上边以后,放开鼠标左键的时候被触发。而event.mimeData().urls()上则返回一个多个QUrl类型的实体,每一个QUrl中包含了每一个文件的路径,通过toLocalFile()可以获取到QUrl中包含的在当前系统上的全路径格式。

有了自定义的DropArea控件,我们通过程序动态的将该控件添加到横向Layout中。在Qt Creator的对象窗口中我们很容易的找到,横向Layout的对象名为horizontalLayout,然后使用horizontalLayout的addItem方法添加控件进去。

在MainWindow类的初始化函数最后添加如下代码,从而在主界面中添加拖放区

self.ui.dropArea = DropArea("或 拖动文件或文件夹到这里", self)self.ui.horizontalLayout.addWidget(self.ui.dropArea)spacerItem = QSpacerItem(40, 20, QSizePolicy.Expanding, QSizePolicy.Minimum) # QtWidgetsself.ui.horizontalLayout.addItem(spacerItem)

运行代码我们的主窗口就可以支持拖放了

参考文献:
PyQt - Drag & DropPyQt - Drag & Drop, The provision of drag and drop is very intuitive for the user. It is found in many desktop applications where the user can copy or move objects from one window https://www.tutorialspoint.com/pyqt/pyqt_drag_and_drop.htm

Python酷 - 来Python酷学Python库 Python之所以如此流行,在于它有强大的生态,使用各种各种的库可以帮助用户最快速的解决问题。Python酷致力于输出高质量的Python库相关教程及技术性文章,帮助用户更好更快速的解决问题https://pythonlibrary.net/2020/01/15/pyqt5-tutorial-2/

拖放drag drop(PyQt或Qt for python)相关推荐

  1. HTML5原生拖拽/拖放 Drag Drop 详解

    转载自:juejin.im/post/5a169d- 前言 拖放(drap && drop)在我们平时的工作中,经常遇到.它表示:抓取对象以后拖放到另一个位置.目前,它是HTML5标准 ...

  2. HTML5原生拖拽/拖放(drag drop)详解

    前言 拖放(drap && drop)在我们平时的工作中,经常遇到.它表示:抓取对象以后拖放到另一个位置.目前,它是HTML5标准的一部分.我从几个方面学习并实践这个功能. 拖放的流程 ...

  3. h5物体拖动_HTML5原生拖拽/拖放(drag drop)详解

    前言 拖放(drap && drop)在我们平时的工作中,经常遇到.它表示:抓取对象以后拖放到另一个位置.目前,它是HTML5标准的一部分.我从几个方面学习并实践这个功能. 拖放的流程 ...

  4. html5拖放详解,HTML5拖拽/拖放(drag drop)详解

    H5中拖拽属性: draggable: auto | true | false 拖动事件: - dragstart 在元素开始被拖动时触发 - dragend 在拖动操作完成时触发 - drag 在元 ...

  5. HTML5 drag drop 拖拽与拖放简介

    by zhangxinxu from http://www.zhangxinxu.com 本文地址:http://www.zhangxinxu.com/wordpress/?p=1419 一.前面的话 ...

  6. ASP.NET AJAX (Atlas) 拖放(Drag Drop)功能6种实现方法总结

    在Ajax程序中实现传统桌面程序中异常简单的拖放功能却并不是件容易的事情.然而Web上的拖放功能又如此的让人痴迷,所以几乎每个成熟的Ajax类库都提供了自己的一套实现拖放的封装,ASP.NET AJA ...

  7. python英文版怎么改成中文版_“PyQt的Qt Designer菜单是中文版的,怎么改成英文的“python的qt designer教程...

    python qt designer 怎么多建一个dialog 请说的详细点,那原消?还是只是出外一个窗口,如果出现另外一个窗口,那么这个窗口是 exec()吗?就是弹出窗口不关闭无法点击原有窗口,即 ...

  8. 使用ASP.NET Atlas实现拖放(Drag Drop)效果(下)

    English Version: http://dflying.dflying.net/1/archive/77_atlas_drag__drop_overview.html 中文版:http://d ...

  9. html5css3菜鸟教程,HTML5+CSS3实现拖放(Drag and Drop)示例

    本文简单介绍一下HTML5的拖放实现.MXGHTML5中文学习网 - HTML5先行者学习网 拖放(Drag 和 drop)是 HTML5 标准的组成部分.MXGHTML5中文学习网 - HTML5先 ...

  10. html5 drag this,HTML5拖放(drag和drog)

    拖放(drag和drog)是HTML5的标准的组成部分,也是种常见的特性,意义为抓起一个元素放入到另外的一个位置,在HTML5中任何元素都可以被拖放,前题是要相关进行设置. 1.设置元素为可拖放,也就 ...

最新文章

  1. 英特尔开源WebRTC开发套件OWT
  2. JavaEE实战班第19天
  3. selenium之批量执行测试用例
  4. Android P(1)---Android P 上手:十年来的最大升级,你想知道的都在这里
  5. .NET Core 3.0中的Cookie身份验证
  6. coolfire文章之一
  7. 高等数学 · 希腊符号
  8. 查询正在使用的用户(删除用户时)
  9. 计算机桌面怎么改为d盘,WinXP桌面路径修改成D盘的步骤
  10. 凑数算法 c语言,算法题解 - 牛客编程巅峰赛S1第4场 - 黄金钻石组
  11. Blend混合模式 与 20余种颜色混合模式代码实现
  12. Opencv求轮廓的中心点坐标
  13. 3D LUT调色:单反如何实现电影级调色。
  14. 程序员合同日期不到想辞职_在职场,辞职有时是难免的,要怎样写辞职信才好呢...
  15. 【深度】谭铁牛院士谈人工智能发展新动态
  16. Cadence学习七:给板子外形倒角
  17. 经典语录:二十不勤,三十不立,四十不富,五十而衰靠子助
  18. 2021年第十二届蓝桥杯模拟赛(第四期)题目和解析
  19. 一个简单的CNN model,训练集MNIST
  20. 雷达相机融合(七)--显示鼠标位置处的实际空间位置

热门文章

  1. Windows Phone实用开发技巧(33):不重启程序切换当前语言
  2. linux系统工程师的前途在哪里
  3. 控制反转与依赖注入概述——Spring IOC/DI(一)
  4. 请不要滥用SharedPreference
  5. [JNI] 开发实例(2) 编译libwebsocket,封装jni函数,搭建IM通信基础服务
  6. C语言文件的存储和处理实验报告,c语言文件处理实验报告(6页)-原创力文档...
  7. python装饰器两层和三层_python装饰器为什么要双层嵌套函数
  8. python输入一系列的值_python中的input()和print()输入输出函数应用实例笔记
  9. 去重仅保留一条_重庆磁器口只是一条商业街?看过它的发展历史,你就不会这么想了...
  10. php怎么实现显示gif图片,利用PHP怎么对gif图片进行判断