拖放

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

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 @ 2019-02-13 22:27  天子骄龙  阅读(273)  评论(0编辑  收藏  举报