Drag与Drop

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

基于MIME类型(Multipurpose Internet Mail Extension, 多用途互联网邮件扩展类型)的拖曳数据传输是基于QDrag类的。QMimeData对象将关联的数据与其对应的MIME类型相关联。

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

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

判断函数 设置函数 获取函数 MIME类型
hasText() text() setText() text/plain
hasHtml() html() setHtml() text/html
hasUrls() urls() setUrls() text/uri-list
haslmage() imageData() setlmageData() image/*
hasColor() colorData() setColorData() application/x-color

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

常用的拖曳事件

DragEnterEvent 当执行一个拖曳控件操作,并且鼠标指针进入该控件时,这个事件将被触发。在这个事件中可以获得被操作的窗口控件,还可以有条件地接受或拒绝该拖曳操作
DragMoveEvent 在拖曳操作进行时会触发该事件
DragLeaveEvent 当执行一个拖曳控件操作,并且鼠标指针离开该控件时,这个事件将被触发
DropEvent 当拖曳操作在目标控件上被释放时,这个事件将被触发
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_())

QClipboard

QClipboard类提供了对系统剪贴板的访问,可以在应用程序之间复制和粘贴数据。它的操作类似于QDrag类,并使用类似的数据类型。

QApplication类有一个静态方法clipboard(),它返回对剪贴板对象的引用。任何类型的MimeData都可以从剪贴板复制或粘贴。

常用方法

clear() 清除剪贴板的内容
setlmage() 将QImage对象复制到剪贴板中
setMimeData() 将MIME数据设置为剪贴板
setPixmap() 从剪贴板中复制Pixmap对象
setText() 从剪贴板中复制文本
text() 从剪贴板中检索文本

常用信号

dataChanged:当剪贴板内容发生变化时,这个信号被发射

import os
import sys
from PyQt5.QtCore import QMimeData
from PyQt5.QtWidgets import (QApplication, QDialog, QGridLayout, QLabel, QPushButton)
from PyQt5.QtGui import QPixmapclass Form(QDialog):def __init__(self, parent=None):super(Form, self).__init__(parent)textCopyButton = QPushButton("&Copy Text")textPasteButton = QPushButton("Paste &Text")htmlCopyButton = QPushButton("C&opy HTML")htmlPasteButton = QPushButton("Paste &HTML")imageCopyButton = QPushButton("Co&py Image")imagePasteButton = QPushButton("Paste &Image")self.textLabel = QLabel("Original text")self.imageLabel = QLabel()self.imageLabel.setPixmap(QPixmap(os.path.join(os.path.dirname(__file__), "images/clock.png")))layout = QGridLayout()layout.addWidget(textCopyButton, 0, 0)layout.addWidget(imageCopyButton, 0, 1)layout.addWidget(htmlCopyButton, 0, 2)layout.addWidget(textPasteButton, 1, 0)layout.addWidget(imagePasteButton, 1, 1)layout.addWidget(htmlPasteButton, 1, 2)layout.addWidget(self.textLabel, 2, 0, 1, 2)layout.addWidget(self.imageLabel, 2, 2)self.setLayout(layout)textCopyButton.clicked.connect(self.copyText)textPasteButton.clicked.connect(self.pasteText)htmlCopyButton.clicked.connect(self.copyHtml)htmlPasteButton.clicked.connect(self.pasteHtml)imageCopyButton.clicked.connect(self.copyImage)imagePasteButton.clicked.connect(self.pasteImage)self.setWindowTitle("Clipboard 例子")def copyText(self):clipboard = QApplication.clipboard()clipboard.setText("I've been clipped!")def pasteText(self):clipboard = QApplication.clipboard()self.textLabel.setText(clipboard.text())def copyImage(self):clipboard = QApplication.clipboard()clipboard.setPixmap(QPixmap(os.path.join(os.path.dirname(__file__), "./images/python.png")))def pasteImage(self):clipboard = QApplication.clipboard()self.imageLabel.setPixmap(clipboard.pixmap())def copyHtml(self):mimeData = QMimeData()mimeData.setHtml("<b>Bold and <font color=red>Red</font></b>")clipboard = QApplication.clipboard()clipboard.setMimeData(mimeData)def pasteHtml(self):clipboard = QApplication.clipboard()mimeData = clipboard.mimeData()if mimeData.hasHtml():self.textLabel.setText(mimeData.html())if __name__ == "__main__":app = QApplication(sys.argv)form = Form()form.show()sys.exit(app.exec_())

PYQT5(13)-基本窗口控件-拖曳与剪贴板相关推荐

  1. 实战PyQt5: 052-停靠窗口控件QDockWidget

    QDockWidget简介 在很多桌面应用软件中,比如Qt的C++ IDE集成开发环境Qt Creater, 宇宙第一集成开发环境Visual Studio等工程软件,都使用了停靠窗口布局,这样做有一 ...

  2. PyQt5学习--基本窗口控件--QLabel

    参考书籍<PyQt5 快速开发与实战>王硕 孙洋洋 著 介绍 QLabel对象作为一个占位符可以显示不可编辑的文本或图片,也可以放置一个GIF动画,还可以被用作提示标记为其他控件.纯文本. ...

  3. PyQt5学习--基本窗口控件--QMainWindow

    参考书籍<PyQt5 快速开发与实战>王硕 孙洋洋 著 QMainWindow主窗口为用户提供一个应用程序框架,它有自己的布局,可以在布局中添加控件.比如将工具栏.菜单栏和状态栏等添加到布 ...

  4. PYQT5(12)-基本窗口控件-窗口绘图类空间

    一般通过QPainter.QPen和QBrush这三个类来实现绘图功能.QPixmap的作用是加载并呈现本 地图像,其图像的呈现本质上也是通过绘图方式实现的. QPainter QPainter类在Q ...

  5. python 动态调整控件大小_python PyQt5如何让窗口控件与窗口大小同步变化?

    在下面的代码中 self.tableWidget.resize(self.width()-20,self.height()-20) self.tableWidget.move(10,20) 这两行没有 ...

  6. PyQt5学习--基本窗口控件--加载文件-QFileDialog

    参考书籍<PyQt5 快速开发与实战>王硕 孙洋洋 著 介绍 QFileDialog是用来打开和保存文件的标准对话框.QFileDialog类继承自QDialog类. QFileDialo ...

  7. PyQt5学习--基本窗口控件--QButton类控件

    参考书籍<PyQt5 快速开发与实战>王硕 孙洋洋 著 介绍 PyQt5按钮的基类是QAbstractButton,为抽象类,不能实例化. 常见的按钮类有:QPushButton.QToo ...

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

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

  9. python gui界面 tcp_python GUI库图形界面开发之PyQt5窗口控件QWidget详细使用方法

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

最新文章

  1. ndk-build: CreateProcess error=193
  2. cacti监控(3)配置cacti
  3. 利用css‘content实现指令式tooltip文字提示
  4. Win7实用技巧之五库功能妙用
  5. 持续集成之 Nuget 进阶
  6. Swift - 触摸事件(点击,移动,抬起等)说明及用例
  7. 互联网巨头布阵LoRaWAN,是又一春天还是不容乐观?
  8. java提交表单后页面不刷新_表单已经提交,但是点击后退,显示网页过期,刷新后怎样避免重复提交(急!!谢谢!)...
  9. 1633: [Usaco2007 Feb]The Cow Lexicon 牛的词典(DP)
  10. mysql 能用compute_SQL compute by 的使用
  11. 从基础综述、论文笔记到工程经验、训练技巧:值得一看的目标检测好文推荐...
  12. 周鸿祎再谈“元宇宙”:文明内卷、数字化威胁,及元宇宙基础设施
  13. 16.面向对象-基础
  14. python wms系统源码_java开发的wms仓库管理系统源码(PC+Android)
  15. 域名通过ipv6解析SSL协议无法访问
  16. Node版本的升级/降级
  17. 元宇宙的雏形?揭秘Meta绝密的现实实验室
  18. 结构建模设计——Solidworks软件之草图绘制基础图形工具总结(绘制直线、矩形、圆、槽、圆弧、圆角等)
  19. CSC Matrix
  20. jquery选择器、标签选择器、类选择器、元素选择器、*选择器、this关键字

热门文章

  1. Uploadify的用法
  2. 真实的北京IT圈:后厂村姑 vs 后厂村花?
  3. cocos2d-html5游戏图片资源选择
  4. CSS-选择器的优先级
  5. 电 脑 小 知 识 荟萃
  6. 滴水穿石 C#中多线程 委托的使用
  7. 【SDL游戏编程入门第一卷】配置SDL环境
  8. 思杰虚拟服务器退出管理主机,详解Citrix思杰XenServer虚拟化(8)
  9. Raspbian命令行安装desktop界面
  10. P44:Math类型、函数