拖放

拖放分为拖动和放下两个动作,它们涉及到以下事件:

DragEnterEvent: 所拖动目标进入接收该事件的窗口或控件时触发;
DragMoveEvent: 所拖动目标进入窗口或控件后,继续被拖动时触发;
DragLeaveEvent: 所拖动目标离开窗口或控件时触发;
DropEvent: 所拖动目标被放下时触发

通常情况下,我们可以拖放两种东西:数据和一些图形对象.如果我们把一张图片从一个程序拖放到另一个程序上,那我们拖放的是二进制数据.如果我们在Firefox里拖一个标签,然后把它放到别的地方,那么我们拖放的是一个图形组件

 

例一拖放txt文件

 

复制代码
 1 import sys
 2 from PyQt5.QtWidgets import QApplication, QTextBrowser
 3 
 4 
 5 class Demo(QTextBrowser):
 6     def __init__(self):
 7         super(Demo, self).__init__()
 8         self.setAcceptDrops(True)  # 设置控件是否允许拖放
 9 
10     def dragEnterEvent(self, e):  #所拖动目标进入接收该事件的窗口或控件时触发
11         print('拖动进入')
12         if e.mimeData().hasText():#是否支持文本文件格式
13             #类型列表参考:http://www.w3school.com.cn/media/media_mimeref.asp
14             e.acceptProposedAction()  #接受拖放操作
15 
16     def dragMoveEvent(self, QDragMoveEvent):  #所拖动目标进入窗口或控件后,继续被拖动时触发
17         print('在拖动')
18 
19     def dragLeaveEvent(self, QDragLeaveEvent):  #所拖动目标离开窗口或控件时触发
20         print('Drag Leave')
21 
22     def dropEvent(self, QDropEvent):  #所拖动目标被放下时触发
23         print('放下拖动')
24         # MacOS
25         txt_path = QDropEvent.mimeData().text().replace('file:///', '/')
26 
27         # Linux
28         # txt_path = QDropEvent.mimeData().text().replace('file:///', '/').strip()
29 
30         # Windows
31         txt_path = QDropEvent.mimeData().text().replace('file:///', '')  #获取本地路径
32         #QDropEvent.mimeData().text()方法获取MIME数据对象中文本,对文件来说就是URI路径.  file:///C:/Users/ming/Desktop/ssss.txt
33 
34         with open(txt_path, 'r') as f:
35             self.setText(f.read())
36 
37 
38 if __name__ == '__main__':
39     app = QApplication(sys.argv)
40     demo = Demo()
41     demo.show()
42     sys.exit(app.exec_())
复制代码

 

posted @   天子骄龙  阅读(284)  评论(0编辑  收藏  举报
编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示

目录导航