Python Qt GUI设计:QDrag拖拽数据传输类(基础篇—18)

本文涉及的产品
数据传输服务 DTS,数据迁移 small 3个月
推荐场景:
MySQL数据库上云
简介: Python Qt GUI设计:QDrag拖拽数据传输类(基础篇—18)

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


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


MIME(Multipurpose Internet Mail Extension,多用途互联网邮件扩展类型)是设定某种扩展名的文件用一种应用程序来打开的方式类型,当该扩展名文件被访问时,浏览器会自动使用指定的应用程序来打开,多用于指定一些客户端自定义的文件名,以及一些媒体文件打开方式。


每种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

如下表所示的MimeData类函数允许检测和使用方便的MIME类型:


image.png


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


image.png


通个示例了解QDrag拖拽数据传输类,示例效果如下所示:


image.png


示例中,DragEnterEvent会验证事件的MIME数据是否包含字符串文本,如果包含字符串文本,就接收事件提出的添加文本操作,并将文本作为新条目(ltem)添加到ComboBox控件中,否则忽略此次操作。


实现代码如下所示:


import sys
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
class Combo(QComboBox):
  def __init__(self, title, parent):
  super(Combo, self).__init__( parent)
  self.setAcceptDrops(True)
  def dragEnterEvent(self, e):
  print(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)
  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_())
相关实践学习
RocketMQ一站式入门使用
从源码编译、部署broker、部署namesrv,使用java客户端首发消息等一站式入门RocketMQ。
Sqoop 企业级大数据迁移方案实战
Sqoop是一个用于在Hadoop和关系数据库服务器之间传输数据的工具。它用于从关系数据库(如MySQL,Oracle)导入数据到Hadoop HDFS,并从Hadoop文件系统导出到关系数据库。 本课程主要讲解了Sqoop的设计思想及原理、部署安装及配置、详细具体的使用方法技巧与实操案例、企业级任务管理等。结合日常工作实践,培养解决实际问题的能力。本课程由黑马程序员提供。
相关文章
|
3天前
|
Python
python面型对象编程进阶(继承、多态、私有化、异常捕获、类属性和类方法)(上)
python面型对象编程进阶(继承、多态、私有化、异常捕获、类属性和类方法)(上)
37 0
|
3天前
|
索引 Python
python 格式化、set类型和class类基础知识练习(上)
python 格式化、set类型和class类基础知识练习
23 0
|
4天前
|
Python
python学习12-类对象和实例对象
python学习12-类对象和实例对象
|
18天前
qt开发使用camera类获取摄像头信息并拍照保存
qt开发使用camera类获取摄像头信息并拍照保存
|
25天前
|
Python
Python类(class)中self的理解
Python类(class)中self的理解
17 0
|
25天前
|
Python
Python类定义:从小白到专家的旅程
Python类定义:从小白到专家的旅程
7 0
|
25天前
|
Python
Python类与对象:深入解析与应用
本文介绍了Python中的核心概念——类和对象,以及它们在面向对象编程中的应用。类是用户定义的类型,描述具有相同属性和行为的对象集合;对象是类的实例,具备类的属性和方法。文章通过示例讲解了如何定义类、创建及使用对象,包括`__init__`方法、属性访问和方法调用。此外,还阐述了类的继承,允许子类继承父类的属性和方法并进行扩展。掌握这些概念有助于提升Python编程的效率和灵活性。
|
30天前
|
缓存 人工智能 定位技术
探究Qt Quick之Overlay类的魅力(二)
探究Qt Quick之Overlay类的魅力
54 0
|
1月前
|
网络协议 C++
C++ Qt开发:QTcpSocket网络通信组件
`QTcpSocket`和`QTcpServer`是Qt中用于实现基于TCP(Transmission Control Protocol)通信的两个关键类。TCP是一种面向连接的协议,它提供可靠的、双向的、面向字节流的通信。这两个类允许Qt应用程序在网络上建立客户端和服务器之间的连接。Qt 是一个跨平台C++图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍如何运用`QTcpSocket`组件实现基于TCP的网络通信功能。
37 8
C++ Qt开发:QTcpSocket网络通信组件
|
9天前
|
图形学 Python 容器
【PyQt5桌面应用开发】3.Qt Designer快速入门(控件详解)
【PyQt5桌面应用开发】3.Qt Designer快速入门(控件详解)
27 0

推荐镜像

更多