Python PyQt5实现拖拽与剪贴板功能详解

 更新时间:2022年12月01日 15:07:20   作者:SongYuLong的博客  
这篇文章主要为大家详细介绍了Python PyQt5如何实现拖拽与剪贴板功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下

拖拽

基于MIME类型的拖拽数据传输时基于QDrag类的QMimeData对象管理的数据与其对应的MIME类型相关联。

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

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

常用拖拽事件

事件描述
DragEnterEvent当执行一个拖拽控件操作,并且鼠标指针进入该控件时被触发
DragMoveEvent在拖拽操作进行时会触发该事件
DragLeaveEvent当执行一个拖拽控件操作,并且鼠标指针离开该控件时被触发
DropEvent当拖拽操作在目标控件上被释放时,触发该事件
import sys
from PyQt5.QtGui import *
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *
from PyQt5.QtCore import Qt

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)
    win = Example()
    win.show()
    sys.exit(app.exec_())

剪贴板

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

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

QClipboard常用方法

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

QClipboard类中的常用信号

信号含义
dataChanged当剪贴板内容发生变化时触发该信号
import os
import sys
from PyQt5.QtCore import QMimeData
from PyQt5.QtWidgets import (QApplication, QDialog, QGridLayout, QLabel, QPushButton)
from PyQt5.QtGui import QPixmap

class 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)
        imageCopyButton.clicked.connect(self.copyImage)
        imagePasteButton.clicked.connect(self.pasteImage)
        htmlCopyButton.clicked.connect(self.copyHtml)
        htmlPasteButton.clicked.connect(self.pasteHtml)

    def copyText(self):
        print(os.path.join(os.path.dirname(__file__)))
        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.jpg")))

    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)
    win = Form()
    win.show()
    sys.exit(app.exec_())

到此这篇关于Python PyQt5实现拖拽与剪贴板功能详解的文章就介绍到这了,更多相关PyQt5拖拽 剪贴板内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • TensorFlow实现卷积神经网络CNN

    TensorFlow实现卷积神经网络CNN

    这篇文章主要为大家详细介绍了TensorFlow实现卷积神经网络CNN,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-03-03
  • python XlsxWriter模块创建aexcel表格的实例讲解

    python XlsxWriter模块创建aexcel表格的实例讲解

    今天小编就为大家分享一篇python XlsxWriter模块创建aexcel表格的实例讲解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-05-05
  • Vue中自定义指令的三个常用方法小结

    Vue中自定义指令的三个常用方法小结

    这篇文章主要为大家详细介绍了Vue中自定义指令的三个常用方法,文中的示例代码讲解详细,具有一定的借鉴价值,有需要的小伙伴可以了解一下
    2024-02-02
  • 黑科技 Python脚本帮你找出微信上删除你好友的人

    黑科技 Python脚本帮你找出微信上删除你好友的人

    黑科技,Python脚本帮你找出微信上删除你好友的人,有兴趣的朋友可以阅读一下
    2016-01-01
  • 基于Python编写一个自动关机程序

    基于Python编写一个自动关机程序

    这篇文章主要介绍了基于Python编写的一个自动关机程序,文中的示例代码讲解详细,对我们学习Python有一定的帮助,感兴趣的同学可以学习一下
    2022-01-01
  • Python和JS反爬之解决反爬参数 signKey

    Python和JS反爬之解决反爬参数 signKey

    这篇文章主要介绍了Python和JS反爬之解决反爬参数 signKey,Python 反爬中有一大类,叫做字体反爬,核心的理论就是通过字体文件或者 CSS 偏移,接下来文章的详细介绍,需要的小伙伴可以参考一下
    2022-05-05
  • Python利用魔法方法玩转对象

    Python利用魔法方法玩转对象

    Python中魔法方法(magic method)其实就是那些被双下划线包围的方法,这些魔法方法为类添加了**“魔力”,让我们可以在面向对象编程中用更加简洁的代码来操作对象,下面我们就来具体了解一下如何利用魔法方法玩转对象吧
    2023-12-12
  • python 遍历列表提取下标和值的实例

    python 遍历列表提取下标和值的实例

    今天小编就为大家分享一篇python 遍历列表提取下标和值的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-12-12
  • Python Django框架介绍之模板标签及模板的继承

    Python Django框架介绍之模板标签及模板的继承

    今天给大家带来Python Django框架的相关知识,文中对模板标签及模板的继承介绍的非常详细,对正在学习python的小伙伴们有很好地帮助,需要的朋友可以参考下
    2021-05-05
  • Python argparse库的基本使用步骤

    Python argparse库的基本使用步骤

    argparse库是python下的一个命令行参数管理库,支持int、str、float、bool、数组等5种基本数据类型,这篇文章主要介绍了Python argparse库的基本使用,需要的朋友可以参考下
    2022-07-07

最新评论