python GUI库图形界面开发之PyQt5控件数据拖曳Drag与Drop详细使用方法与实例
PyQt5数据拖曳Drag与Drop介绍
为用户提供的拖曳功能很直观,在很对桌面应用程序中,复制或移动对象都可以通过拖曳来完成
基于MIME类型的拖曳数据传输是基于QDrag类的,QMimeData对象将关联的数据与其对应的MIME类型相关联
MIME意为多功能Internet邮件扩展,它设计的最初目的是为了在发送电子邮件时附加多媒体数据,让邮件客户程序能根据其类型进行处理。然而当它被HTTP协议支持之后,它的意义就更为显著了。它使得HTTP传输的不仅是普通的文本,而变得丰富多彩。
每个MIME类型由两部分组成,前面是数据的大类别,例如声音audio、图象image等,后面定义具体的种类。
常见的MIME类型(通用型):
超文本标记语言文本.htmltext/html
xml文档.xmltext/xml
XHTML文档.xhtmlapplication/xhtml+xml
普通文本.txttext/plain
RTF文本.rtfapplication/rtf
PDF文档.pdfapplication/pdf
MicrosoftWord文件.wordapplication/msword
PNG图像.pngimage/png
GIF图形.gifimage/gif
JPEG图形.jpeg,.jpgimage/jpeg
au声音文件.auaudio/basic
MIDI音乐文件mid,.midiaudio/midi,audio/x-midi
RealAudio音乐文件.ra,.ramaudio/x-pn-realaudio
MPEG文件.mpg,.mpegvideo/mpeg
AVI文件.avivideo/x-msvideo
GZIP文件.gzapplication/x-gzip
TAR文件.tarapplication/x-tar
任意的二进制数据application/octet-stream
MIME类型的数据可以简单的理解为互联网上的各种资源,比如文本,音频和图片等资源,互联网上的每一种资源都属于一种MIME类型的数据
MimeData类函数允许检测和使用方便的MIME类型
许多QWidget对象都支持拖曳动作,允许拖曳数据的控件必须设置QWidget.setDragEnabled()为True,另外,控件应该响应拖曳事件,以便储存所拖曳的数据
常用的拖曳事件如表
Drag拖曳功能实例
importsys fromPyQt5.QtWidgetsimport* fromPyQt5.QtCoreimport* fromPyQt5.QtGuiimport* classCombo(QComboBox): def__init__(self,title,parent): super(Combo,self).__init__(parent) #设置为可接受拖曳操作文本 self.setAcceptDrops(True) #当执行一个拖曳控件操作,并且鼠标指针进入该控件时,这个事件将会被触发。 #在这个事件中可以获得被操作的窗口控件,还可以有条件地接受或拒绝该拖曳操作 defdragEnterEvent(self,e): #检测拖曳进来的数据是否包含文本,如有则接受,无则忽略 ife.mimeData().hasText(): e.accept() else: e.ignore() #当拖曳操作在其目标控件上被释放时,这个事件将被触发 defdropEvent(self,e): #添加拖曳文本到条目中 self.addItem(e.mimeData().text()) classExample(QWidget): def__init__(self): super(Example,self).__init__() self.initUI() definitUI(self): #表单布局,添加控件 lo=QFormLayout() lo.addRow(QLabel('请把左边的文本拖曳到右边的下拉菜单中')) #实例化单行文本框,设置为允许拖曳操作 edit=QLineEdit() edit.setDragEnabled(True) #实例化Combo对象,添加控件到布局中 com=Combo('Button',self) lo.addRow(edit,com) #设置主窗口布局及标题 self.setLayout(lo) self.setWindowTitle('简单的拖曳例子') if__name__=='__main__': app=QApplication(sys.argv) ex=Example() ex.show() sys.exit(app.exec_())
效果如图
代码分析:
在这个例子中,DragEnterEvent会验证事件的MIM的数据是否包含字符串文本,如果包含字符串文本,就接受事件提出的添加文本操作,并将文本作为新条目(Item)添加到ComboBox控件中,否则忽略这次操作
defdragEnterEvent(self,e): #检测拖曳进来的数据是否包含文本,如有则接受,无则忽略 ife.mimeData().hasText(): e.accept() else: e.ignore()
本文主要介绍了PyQt5控件数据拖曳Drag与Drop详细使用方法与实例,更多关于这方面的知识请查看下面的相关链接
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。