拖放
拖放分为拖动和放下两个动作,它们涉及到以下事件:
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_())
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于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)