拖放
拖放分为拖动和放下两个动作,它们涉及到以下事件:
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_())