python GUI库图形界面开发之PyQt5控件数据拖曳Drag与Drop详细使用方法与实例
作者:jia666666 发布时间:2022-04-19 04:22:39
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详细使用方法与实例,更多关于这方面的知识请查看下面的相关链接
来源:https://blog.csdn.net/jia666666/article/details/81568326
猜你喜欢
- 当我们导入的模型含有自定义层或者自定义函数时,需要使用custom_objects来指定目标层或目标函数。例如:我的一个模型含有自定义层“S
- 测试环境:1:xp系统2:双显,1680×1050 + 1050×16803:chrome 版本4.14:ff版本3.6chrome是我的默
- 最近在学习python,做一些python练习题github上几年前的练习题有一题是这样的:使用 Python 实现:对着电脑吼一声,自动打
- 您是否常常在做网页的过程中发现一个问题呢?当图片上传的时候,如果图片太大 ,就会把网页撑破,唯一做的就要先把它用软件缩小,再上传上
- 由于tkinter没有直接提供居中显示的api,因此,要想将tk的对话框居中显示,需要用到tk自带的设定位置的方法geometry()nSc
- 为什么要写这篇文章其实是因为最近学到了python的property装饰器的相关知识,刚开始学得云里雾里,于是乎,看了许多相关博客,不巧,大
- 前言相当不错的 Javascript 编程风格规范,建议大家采用此规范编写 Javascript。原文链接: http://dojotool
- 这里需要用到python处理excel很经典的库openpyxl,安装也特别简单。window直接pip install就好了代码在这里~w
- isnumeric()方法检查字符串是否仅由数字组成。这种方法只表示为Unicode对象。注意:要定义一个字符串为Unicode
- 不知道从什么时候开始,在网络上到处可以看到div+css,到底什么是div+css呢?难道就是传说中的标准重构吗?标准从最简单的根源来说不是
- 除了在 Error 对象和 Errors 集合中说明的提供者错误之外,ADO 本身也将错误返回到运行时环境的异常处理机制之中。使用
- Django中请求的生命周期HTTP请求及服务端响应中传输的所有数据都是字符串步骤用户在浏览器中输入url时,浏览器会生成请求头和请求体发给
- 我们可以利用err对象来判断。当程序没有出现错误就说明已经执行了sql操作: sql="insert into
- Python特别灵活,肯定方法不止一种,这里介绍一种我觉得比较简单的方法。如下图,使用x == np.max(x) 获得一个掩模矩阵,然后使
- 本文实例讲述了PHP实现的redis主从数据库状态检测功能。分享给大家供大家参考,具体如下:实例:<?php/** * 检测多个主从r
- 本文实例讲述了php将12小时制转换成24小时制的方法。分享给大家供大家参考。具体如下:php将12小时制转换成24小时制,输入格式为:02
- 前言今天制作的这一款能在B站能指定直播间、自动发弹幕的功能的脚本,因为没做那么多的功能,所以代码很简单,适合刚入门的同学学习先打开一个直播间
- 最近圣诞节快到啦,CSDN的热搜也变成了”代码画颗圣诞树“,看了几篇博客,发现原博主把一些圣诞树给融合在了一起。我更喜欢树叶🍃更茂盛的感觉,
- 先思考一些问题:它是做什么的、以及怎么使用它。带着这些问题往下走。consul是做什么的consul用于微服务下的服务治理。服务治理是什么?
- 一、什么是Django ContentTypes?Django ContentTypes是由Django框架提供的一个核心功能,它对当前项目