PyQt5学习(三)拖拽功能 QDrag

参考:https://blog.csdn.net/jia666666/article/details/81568326

为用户提供拖拽功能很直观,在很多桌面应用程序中,复制和移动对象都可以通过拖拽来完成

基于MIME类型的拖曳数据传输是基于QDrag类的,QMimeData对象将关联的数据与其对应的MIME类型相关联

MIME意为多功能Internet邮件扩展,它设计的最初目的是为了在发送电子邮件时附加多媒体数据,让邮件客户程序能根据其类型进行处理。然而当它被HTTP协议支持之后,它的意义就更为显著了。它使得HTTP传输的不仅是普通的文本,而变得丰富多彩。 
每个MIME类型由两部分组成,前面是数据的大类别,例如声音audio、图象image等,后面定义具体的种类。 
常见的MIME类型(通用型): 
超文本标记语言文本 .html text/html 
xml文档 .xml text/xml 
XHTML文档 .xhtml application/xhtml+xml 
普通文本 .txt text/plain 
RTF文本 .rtf application/rtf 
PDF文档 .pdf application/pdf 
Microsoft Word文件 .word application/msword 
PNG图像 .png image/png 
GIF图形 .gif image/gif 
JPEG图形 .jpeg,.jpg image/jpeg 
au声音文件 .au audio/basic 
MIDI音乐文件 mid,.midi audio/midi,audio/x-midi 
RealAudio音乐文件 .ra, .ram audio/x-pn-realaudio 
MPEG文件 .mpg,.mpeg video/mpeg 
AVI文件 .avi video/x-msvideo 
GZIP文件 .gz application/x-gzip 
TAR文件 .tar application/x-tar 
任意的二进制数据 application/octet-stream

MIME类型的数据可以简单的理解为互联网上的各种资源,比如文本,音频和图片等资源,互联网上的每一种资源都属于一种MIME类型的数据

PyQt5学习(三)拖拽功能 QDrag_第1张图片

许多QWideget对象都支持拖拽动作,允许拖拽数据的控件必须设置Qwidget.setDragEnabled()为True,另外,控件应该相应拖拽时间。以存储所拖拽的数据

事件 描述
DragEnterEvent 当执行一个拖拽控件操作,并且鼠标指针进入该控件时,这个事件将会被触动,这个事件中可以获得被操作的窗口的控件,还可以有条件的接受或拒绝该拖拽操作
DragMoveEvent

在拖拽操作进行时会触发该事件

 

DragLeaveEvent 当执行一个拖拽操作,并且鼠标指针离开该控件时,这个事件被触发
DropEvent 当拖拽操作在其目标控件上呗释放时,这个事件被触发
import sys
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *

class Combo(QComboBox):
    def __init__(self,title,parent):
        super(Combo, self).__init__(parent)
        #设置为可接受拖曳操作文本
        self.setAcceptDrops(True)

    #当执行一个拖曳控件操作,并且鼠标指针进入该控件时,这个事件将会被触发。
    # 在这个事件中可以获得被操作的窗口控件,还可以有条件地接受或拒绝该拖曳操作
    def dragEnterEvent(self,e):
        #检测拖曳进来的数据是否包含文本,如有则接受,无则忽略
        if e.mimeData().hasText():
            e.accept()
        else:
            e.ignore()
    #当拖曳操作在其目标控件上被释放时,这个事件将被触发
    def dropEvent(self,e):
        #添加拖曳文本到条目中
        self.addItem(e.mimeData().text())
class Example(QWidget):
    def __init__(self):
        super(Example, self).__init__()
        self.initUI()

    def initUI(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_())

PyQt5学习(三)拖拽功能 QDrag_第2张图片

你可能感兴趣的:(pyqt5)