温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

怎么在python中使用Drag与Drop控件

发布时间:2021-03-20 16:31:15 来源:亿速云 阅读:383 作者:Leah 栏目:开发技术

本篇文章为大家展示了怎么在python中使用Drag与Drop控件,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

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()setImageDataimage/*
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_())

效果如图

怎么在python中使用Drag与Drop控件

代码分析:

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

  def dragEnterEvent(self,e):
    #检测拖曳进来的数据是否包含文本,如有则接受,无则忽略
    if e.mimeData().hasText():
      e.accept()
    else:
      e.ignore()

上述内容就是怎么在python中使用Drag与Drop控件,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注亿速云行业资讯频道。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI