PyQt5数据拖曳Drag与Drop介绍

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

基于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类型的数据

MimeData类函数允许检测和使用方便的MIME类型

判断函数

设置函数

获取函数

MIME类型

hasText()

text()

setText()

text/plain

hasHtml()

html()

setHtml()

text/html

hasUrls()

urls()

setUrls()

text/url-list

hasImage()

imageData()

setImageData

image/*

hasColor()

colorData()

setColrDaata()

application/x-color

许多QWidget对象都支持拖曳动作,允许拖曳数据的控件必须设置QWidget.setDragEnabled()为True,另外,控件应该响应拖曳事件,以便储存所拖曳的数据

常用的拖曳事件如表

事件

描述

DragEnterEvent

当执行一个拖曳控件操作,并且鼠标指针进入该控件时,这个事件将会被触发。在这个事件中可以获得被操作的窗口控件,还可以有条件地接受或拒绝该拖曳操作

DragMoveEvent

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

DragLeaveEvent

当执行一个拖曳操作,并且鼠标指针离开该控件时,这个事件被触发

DropEvent

当拖曳操作在其目标控件上被释放时,这个事件将被触发

Drag拖曳功能实例

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

效果如图

代码分析:

在这个例子中,DragEnterEvent会验证事件的MIM的数据是否包含字符串文本,如果包含字符串文本,就接受事件提出的添加文本操作,并将文本作为新条目(Item)添加到ComboBox控件中,否则忽略这次操作

def dragEnterEvent(self,e):

#检测拖曳进来的数据是否包含文本,如有则接受,无则忽略

if e.mimeData().hasText():

e.accept()

else:

e.ignore()

本文主要介绍了PyQt5控件数据拖曳Drag与Drop详细使用方法与实例,更多关于这方面的知识请查看下面的相关链接

python可视化拖拽平台_python GUI库图形界面开发之PyQt5控件数据拖曳Drag与Drop详细使用方法与实例...相关推荐

  1. python输入数据pyqt5_python GUI库图形界面开发之PyQt5信号与槽多窗口数据传递详细使用方法与实例...

    在pyqt5编程过程中,经常会遇到输入或选择多个参数的问题,把多个参数写到一个窗口中,主窗口会显得很臃肿,所以,一般是添加一个按钮,调用对话框,在对话框中进行参数的选择,关闭对话框将参数返回给主窗口 ...

  2. python 动态调整控件大小_python GUI库图形界面开发之PyQt5动态(可拖动控件大小)布局控件QSplitter详细使用方法与实例...

    PyQt5动态(可拖动控件大小)布局控件QSplitter简介 PyQt还提供了特殊的布局管理器QSplitter.它可以动态地拖动子控件之间的边界,算是一个动态的布局管理器,QSplitter允许用 ...

  3. python menu实例_python GUI库图形界面开发之PyQt5菜单栏控件QMenuBar的详细使用方法与实例...

    PyQt5菜单栏控件QMenuBar介绍 QMenuBar在QMainWindow对象的标题栏下方,水平的QMenuBar被保留显示QMenu对象 QMenuBar类提供了一个可以包含一个或多个QAc ...

  4. qpython3可视图形界面_python GUI库图形界面开发之PyQt5窗口控件QWidget详细使用方法...

    QWidget基本介绍 基础窗口控件QWidget类是所有用户界面对象的基类,所有的窗口或者控件都直接或者间接的继承自QWidget类. 窗口坐标系统 PyQt使用统一的坐标系统来定位窗口控件的位置和 ...

  5. pythongui项目实例_python GUI库图形界面开发之PyQt5状态栏控件QStatusBar详细使用方法实例...

    PyQt5状态栏控件QStatusBar简介 MainWindow对象在底部保留有一个水平条,作为状态栏(QstatusBar),用于显示永久或临时的状态信息 QStatusBar类中的常用方法 方法 ...

  6. python界面设计资源库_python GUI库图形界面开发之PyQt5 Qt Designer工具(Qt设计师)详细使用方法及Designer ui文件转py文件方法...

    PyQt5 Qt Designer (Qt设计师) PyQt5是对Qt所有类进行封装, Qt能开发的东西, PyQt都能开发. Qt是强大的GUI库之一, 用C++开发, 并且跨平台. PyQt双许可 ...

  7. python制作窗口界面_python GUI库图形界面开发之PyQt5窗口背景与不规则窗口实例

    窗口背景主要包括,背景色与背景图片,设置窗口背景有三种方法 使用QSS设置窗口背景 使用QPalette设置窗口背景 实现PainEvent,使用QPainter绘制背景 QSS设置窗口背景 在QSS ...

  8. python图形界面设计代码_python GUI库图形界面开发之PyQt5 Qt Designer工具(Qt设计师)详细使用方...

    PyQt5 Qt Designer (Qt设计师) PyQt5是对Qt所有类进行封装, Qt能开发的东西, PyQt都能开发. Qt是强大的GUI库之一, 用C++开发, 并且跨平台. PyQt双许可 ...

  9. python界面编程实例_python GUI库图形界面开发之PyQt5美化窗体与控件(异形窗体)实例...

    在默认情况下,我们使用PyQt5创建出来的窗口和部件都是默认的样式,虽然谈不上很丑,但是也毫无美感可言.其实,在PyQt5中,我们可以有较高的自由度来自定义窗口和各种小部件的样式,通过自定义这些样式, ...

最新文章

  1. STL中的双向队列deque
  2. java注解,通过反射解析注解,模仿hibernate,获取sql语句。
  3. 如何在SQL Server中使用触发器
  4. JDBC、DriverManage、JNDI、数据源(DataSource)、连接池的区别
  5. java mapreduce 实例_MapReduce -- JAVA 实例(一)计算总数
  6. 出现(n+1)/2次的数 — 给n个数字,求至少出现(N+1)/2次的那个数字?
  7. 123.买卖股票的最佳时机III
  8. vscode安装插件提示版本不匹配或版本过低
  9. python怎么读音发音英语翻译-python style是什么意思
  10. mathorcup历年优秀论文阿里云盘
  11. Superset航班数据可视化实战
  12. Parallels Desktop 17新版本:让MacM1享受Windows11的配置全流程
  13. 顶级的 18 款开源的低代码开发平台,经典收藏
  14. HIVE 计算指定日期本周的第一天和最后一天
  15. 快速构建Table和Form页面
  16. 公司官网产品爬取写入ES
  17. 元胞自动机交通模型【matlab实现】
  18. ICT产业关联效应的国际比较——基于投入产出的分析
  19. Java内存区域与OutOfMemoryError
  20. Q245R(R-HIC)是什么材质Q245R(R-HIC)抗氢钢钢板简介化学成分

热门文章

  1. SVM分类器原来这么简单
  2. 20 个好用的 Go 语言微服务开发框架
  3. Apple Music怎么体验杜比全景声和无损音频
  4. 2022年5月大厂面试总结
  5. 企业工程项目管理系统源码的各模块及其功能点清单
  6. js读取解析JSON类型数据
  7. 服务器的系统日志路径,系统日志文件保存路径更改
  8. Android小米手机必须插入sim卡才可以usb调试解决方案
  9. android usb hid键盘键值,avr模拟电脑USBHID键盘,键值对应关系问题,和ASCII表对应符不符?请教!...
  10. Android 键值大全(键值定义源码)