拖放
拖放分为拖动和放下两个动作,它们涉及到以下事件:
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,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· C++代码改造为UTF-8编码问题的总结
· DeepSeek 解答了困扰我五年的技术问题
· 为什么说在企业级应用开发中,后端往往是效率杀手?
· 用 C# 插值字符串处理器写一个 sscanf
· Java 中堆内存和栈内存上的数据分布和特点
· What?废柴, 还在本地部署DeepSeek吗?Are you kidding?
· 程序员转型AI:行业分析
· 深入集成:使用 DeepSeek SDK for .NET 实现自然语言处理功能
· 为DeepSeek添加本地知识库
· .NET程序员AI开发基座:Microsoft.Extensions.AI